|
| 1 | +namespace ARCtrl.Json |
| 2 | + |
| 3 | +open Thoth.Json.Core |
| 4 | + |
| 5 | +open ARCtrl |
| 6 | +open ARCtrl.Process |
| 7 | +open ARCtrl.Helper |
| 8 | +open Conversion |
| 9 | + |
| 10 | +module Run = |
| 11 | + |
| 12 | + let rec encoder (run: ArcRun) = |
| 13 | + [ |
| 14 | + "Identifier", Encode.string run.Identifier |> Some |
| 15 | + Encode.tryInclude "Title" Encode.string run.Title |
| 16 | + Encode.tryInclude "Description" Encode.string run.Description |
| 17 | + Encode.tryInclude "MeasurementType" OntologyAnnotation.encoder run.MeasurementType |
| 18 | + Encode.tryInclude "TechnologyType" OntologyAnnotation.encoder run.TechnologyType |
| 19 | + Encode.tryInclude "TechnologyPlatform" OntologyAnnotation.encoder run.TechnologyPlatform |
| 20 | + Encode.tryInclude "DataMap" DataMap.encoder run.DataMap |
| 21 | + Encode.tryIncludeSeq "WorkflowIdentifiers" Encode.string run.WorkflowIdentifiers |
| 22 | + Encode.tryIncludeSeq "Tables" ArcTable.encoder run.Tables |
| 23 | + Encode.tryIncludeSeq "Performers" Person.encoder run.Performers |
| 24 | + Encode.tryIncludeSeq "Comments" Comment.encoder run.Comments |
| 25 | + ] |
| 26 | + |> Encode.choose |
| 27 | + |> Encode.object |
| 28 | + |
| 29 | + let decoder: Decoder<ArcRun> = |
| 30 | + Decode.object (fun get -> |
| 31 | + ArcRun.create( |
| 32 | + get.Required.Field("Identifier") Decode.string, |
| 33 | + ?title = get.Optional.Field "Title" Decode.string, |
| 34 | + ?description = get.Optional.Field "Description" Decode.string, |
| 35 | + ?measurementType = get.Optional.Field "MeasurementType" OntologyAnnotation.decoder, |
| 36 | + ?technologyType = get.Optional.Field "TechnologyType" OntologyAnnotation.decoder, |
| 37 | + ?technologyPlatform = get.Optional.Field "TechnologyPlatform" OntologyAnnotation.decoder, |
| 38 | + ?workflowIdentifiers = get.Optional.Field "WorkflowIdentifiers" (Decode.resizeArray Decode.string), |
| 39 | + ?tables = get.Optional.Field "Tables" (Decode.resizeArray ArcTable.decoder), |
| 40 | + ?datamap = get.Optional.Field "DataMap" DataMap.decoder, |
| 41 | + ?performers = get.Optional.Field "Performers" (Decode.resizeArray Person.decoder), |
| 42 | + ?comments = get.Optional.Field "Comments" (Decode.resizeArray Comment.decoder) |
| 43 | + ) |
| 44 | + ) |
0 commit comments