Skip to content

Commit

Permalink
Start moving Arc Json logic 🚧
Browse files Browse the repository at this point in the history
  • Loading branch information
Freymaurer committed Mar 22, 2024
1 parent e710c5a commit 04b097b
Show file tree
Hide file tree
Showing 6 changed files with 207 additions and 253 deletions.
95 changes: 0 additions & 95 deletions src/Json/ArcAssay.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,102 +4,7 @@ open Thoth.Json.Core

open ARCtrl

module JsonHelper =
let DecodeOa : Decoder<OntologyAnnotation> = OntologyAnnotation.decoder (ConverterOptions())
let DecodeTables = Decode.list ArcTable.decoder
let DecodePersons : Decoder<Person list> = Decode.list (Person.decoder (ConverterOptions()))
let DecodeComments : Decoder<Comment list> = Decode.list (Comment.decoder (ConverterOptions()))
let DecodeFactors : Decoder<Factor list> = Decode.list (Factor.decoder (ConverterOptions()))
let DecodePublications: Decoder<Publication list> = Decode.list (Publication.decoder (ConverterOptions()))
let DecodeOntologySourceReferences: Decoder<OntologySourceReference list> = Decode.list (OntologySourceReference.decoder (ConverterOptions ()))
let tryGetTables (get:Decode.IGetters) (fieldName:string) = get.Optional.Field(fieldName) DecodeTables |> Option.map ResizeArray |> Option.defaultValue (ResizeArray())
let tryGetPersons (get:Decode.IGetters) (fieldName:string) = get.Optional.Field(fieldName) DecodePersons |> Option.map Array.ofList |> Option.defaultValue (Array.empty)
let tryGetComments (get:Decode.IGetters) (fieldName:string) = get.Optional.Field(fieldName) DecodeComments |> Option.map Array.ofList |> Option.defaultValue (Array.empty)
let tryGetPublications (get:Decode.IGetters) (fieldName:string) = get.Optional.Field(fieldName) DecodePublications |> Option.map Array.ofList |> Option.defaultValue (Array.empty)
let tryGetOAs (get:Decode.IGetters) (fieldName:string) = get.Optional.Field(fieldName) (Decode.list DecodeOa) |> Option.map Array.ofList |> Option.defaultValue (Array.empty)
let tryGetFactors (get:Decode.IGetters) (fieldName:string) = get.Optional.Field(fieldName) DecodeFactors |> Option.map Array.ofList |> Option.defaultValue (Array.empty)
let tryGetStringResizeArray (get: Decode.IGetters) (fieldName:string) : ResizeArray<string> = get.Optional.Field(fieldName) (Decode.list Decode.string) |> Option.map ResizeArray |> Option.defaultValue (ResizeArray())
let tryGetOntologySourceReferences (get: Decode.IGetters) (fieldName:string) : OntologySourceReference [] = get.Optional.Field(fieldName) (DecodeOntologySourceReferences) |> Option.map Array.ofList |> Option.defaultValue (Array.empty)
let EncoderOA (t: OntologyAnnotation) = OntologyAnnotation.encoder (ConverterOptions()) t
let EncoderOAs (t: seq<OntologyAnnotation>) = Encode.seq (Seq.map EncoderOA t)
let EncoderTables (t: seq<ArcTable>) = Encode.seq (Seq.map ArcTable.encoder t)
let EncoderPerson (t: Person) = Person.encoder (ConverterOptions()) t
let EncoderPersons (t: seq<Person>) = Encode.seq (Seq.map EncoderPerson t)
let EncoderComment (t:Comment) = Comment.encoder (ConverterOptions()) t
let EncoderComments (t:seq<Comment>) = Encode.seq (Seq.map EncoderComment t)
let EncoderPublication (t:Publication) = Publication.encoder (ConverterOptions()) t
let EncoderPublications (t:seq<Publication>) = Encode.seq (Seq.map EncoderPublication t)
let EncoderFactor (t: Factor) = Factor.encoder (ConverterOptions()) t
let EncoderFactors (t: seq<Factor>) = Encode.seq (Seq.map EncoderFactor t)
let EncoderOntologySourceReference (t: OntologySourceReference) = OntologySourceReference.encoder (ConverterOptions()) t
let EncoderOntologySourceReferences (t: seq<OntologySourceReference>) = Encode.seq (Seq.map EncoderOntologySourceReference t)

open JsonHelper

module ArcAssay =
let encoder (assay:ArcAssay) =
Encode.object [
"Identifier", Encode.string assay.Identifier
if assay.MeasurementType.IsSome then
"MeasurementType", EncoderOA assay.MeasurementType.Value
if assay.TechnologyType.IsSome then
"TechnologyType", EncoderOA assay.TechnologyType.Value
if assay.TechnologyPlatform.IsSome then
"TechnologyPlatform", EncoderOA assay.TechnologyPlatform.Value
if assay.Tables.Count <> 0 then
"Tables", EncoderTables assay.Tables
if assay.Performers.Length <> 0 then
"Performers", EncoderPersons assay.Performers
if assay.Comments.Length <> 0 then
"Comments", EncoderComments assay.Comments
]

let decoder : Decoder<ArcAssay> =
Decode.object (fun get ->
ArcAssay.make
(get.Required.Field("Identifier") Decode.string)
(get.Optional.Field("MeasurementType") DecodeOa)
(get.Optional.Field("TechnologyType") DecodeOa)
(get.Optional.Field("TechnologyPlatform") DecodeOa)
(tryGetTables get "Tables")
(tryGetPersons get "Performers")
(tryGetComments get "Comments")
)

let compressedEncoder (stringTable : StringTableMap) (oaTable : OATableMap) (cellTable : CellTableMap) (assay:ArcAssay) =
Encode.object [
"Identifier", Encode.string assay.Identifier
if assay.MeasurementType.IsSome then
"MeasurementType", OATable.encodeOA oaTable assay.MeasurementType.Value
if assay.TechnologyType.IsSome then
"TechnologyType", OATable.encodeOA oaTable assay.TechnologyType.Value
if assay.TechnologyPlatform.IsSome then
"TechnologyPlatform", OATable.encodeOA oaTable assay.TechnologyPlatform.Value
if assay.Tables.Count <> 0 then
"Tables", Encode.seq (Seq.map (ArcTable.compressedEncoder stringTable oaTable cellTable) assay.Tables)
if assay.Performers.Length <> 0 then
"Performers", EncoderPersons assay.Performers
if assay.Comments.Length <> 0 then
"Comments", EncoderComments assay.Comments
]


let compressedDecoder (stringTable : StringTableArray) (oaTable : OATableArray) (cellTable : CellTableArray) : Decoder<ArcAssay> =
Decode.object (fun get ->
let tables =
get.Optional.Field("Tables") (Decode.array (ArcTable.compressedDecoder stringTable oaTable cellTable))
|> Option.map ResizeArray
|> Option.defaultValue (ResizeArray())
ArcAssay.make
(get.Required.Field("Identifier") Decode.string)
(get.Optional.Field("MeasurementType") (OATable.decodeOA oaTable))
(get.Optional.Field("TechnologyType") (OATable.decodeOA oaTable))
(get.Optional.Field("TechnologyPlatform") (OATable.decodeOA oaTable))
tables
(tryGetPersons get "Performers")
(tryGetComments get "Comments")
)


/// exports in json-ld format
let toJsonldString (a:ArcAssay) =
Expand Down
94 changes: 0 additions & 94 deletions src/Json/ArcStudy.fs
Original file line number Diff line number Diff line change
Expand Up @@ -4,101 +4,7 @@ open Thoth.Json.Core

open ARCtrl

open JsonHelper

module ArcStudy =
let encoder (study:ArcStudy) =
Encode.object [
"Identifier", Encode.string study.Identifier
if study.Title.IsSome then
"Title", Encode.string study.Title.Value
if study.Description.IsSome then
"Description", Encode.string study.Description.Value
if study.SubmissionDate.IsSome then
"SubmissionDate", Encode.string study.SubmissionDate.Value
if study.PublicReleaseDate.IsSome then
"PublicReleaseDate", Encode.string study.PublicReleaseDate.Value
if study.Publications.Length <> 0 then
"Publications", EncoderPublications study.Publications
if study.Contacts.Length <> 0 then
"Contacts", EncoderPersons study.Contacts
if study.StudyDesignDescriptors.Length <> 0 then
"StudyDesignDescriptors", EncoderOAs study.StudyDesignDescriptors
if study.TableCount <> 0 then
"Tables", EncoderTables study.Tables
if study.RegisteredAssayIdentifiers.Count <> 0 then
"RegisteredAssayIdentifiers", Encode.seq (Seq.map Encode.string study.RegisteredAssayIdentifiers)
if study.Factors.Length <> 0 then
"Factors", EncoderFactors study.Factors
if study.Comments.Length <> 0 then
"Comments", EncoderComments study.Comments
]

let decoder : Decoder<ArcStudy> =
Decode.object (fun get ->
ArcStudy.make
(get.Required.Field("Identifier") Decode.string)
(get.Optional.Field("Title") Decode.string)
(get.Optional.Field("Description") Decode.string)
(get.Optional.Field("SubmissionDate") Decode.string)
(get.Optional.Field("PublicReleaseDate") Decode.string)
(tryGetPublications get "Publications")
(tryGetPersons get "Contacts")
(tryGetOAs get "StudyDesignDescriptors")
(tryGetTables get "Tables")
(tryGetStringResizeArray get "RegisteredAssayIdentifiers")
(tryGetFactors get "Factors")
(tryGetComments get "Comments")
)

let compressedEncoder (stringTable : StringTableMap) (oaTable : OATableMap) (cellTable : CellTableMap) (study:ArcStudy) =
Encode.object [
"Identifier", Encode.string study.Identifier
if study.Title.IsSome then
"Title", Encode.string study.Title.Value
if study.Description.IsSome then
"Description", Encode.string study.Description.Value
if study.SubmissionDate.IsSome then
"SubmissionDate", Encode.string study.SubmissionDate.Value
if study.PublicReleaseDate.IsSome then
"PublicReleaseDate", Encode.string study.PublicReleaseDate.Value
if study.Publications.Length <> 0 then
"Publications", EncoderPublications study.Publications
if study.Contacts.Length <> 0 then
"Contacts", EncoderPersons study.Contacts
if study.StudyDesignDescriptors.Length <> 0 then
"StudyDesignDescriptors", EncoderOAs study.StudyDesignDescriptors
if study.TableCount <> 0 then
"Tables", Encode.seq (Seq.map (ArcTable.compressedEncoder stringTable oaTable cellTable) study.Tables)
if study.RegisteredAssayIdentifiers.Count <> 0 then
"RegisteredAssayIdentifiers", Encode.seq (Seq.map Encode.string study.RegisteredAssayIdentifiers)
if study.Factors.Length <> 0 then
"Factors", EncoderFactors study.Factors
if study.Comments.Length <> 0 then
"Comments", EncoderComments study.Comments
]

let compressedDecoder (stringTable : StringTableArray) (oaTable : OATableArray) (cellTable : CellTableArray) : Decoder<ArcStudy> =
Decode.object (fun get ->
let tables =
get.Optional.Field("Tables") (Decode.array (ArcTable.compressedDecoder stringTable oaTable cellTable))
|> Option.map ResizeArray
|> Option.defaultValue (ResizeArray())
ArcStudy.make
(get.Required.Field("Identifier") Decode.string)
(get.Optional.Field("Title") Decode.string)
(get.Optional.Field("Description") Decode.string)
(get.Optional.Field("SubmissionDate") Decode.string)
(get.Optional.Field("PublicReleaseDate") Decode.string)
(tryGetPublications get "Publications")
(tryGetPersons get "Contacts")
(tryGetOAs get "StudyDesignDescriptors")
tables
(tryGetStringResizeArray get "RegisteredAssayIdentifiers")
(tryGetFactors get "Factors")
(tryGetComments get "Comments")
)


/// exports in json-ld format
let toJsonldString (a:ArcStudy) (assays: ResizeArray<ArcAssay>) =
Expand Down
Loading

0 comments on commit 04b097b

Please sign in to comment.