Skip to content

Commit

Permalink
add ARC RO-Crate serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
HLWeil committed Mar 25, 2024
1 parent 4cd6d63 commit e3437b2
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 17 deletions.
10 changes: 10 additions & 0 deletions src/ARCtrl/ARC.fs
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,16 @@ type ARC(?isa : ArcInvestigation, ?cwl : CWL.CWL, ?fs : FileSystem.FileSystem) =
ARCtrl.Contract.Git.gitignoreFileName, ARCtrl.Contract.Git.gitignoreContract
|]

static member fromROCrateJsonString (s:string) =
let isa = ARCtrl.Json.Decode.fromJsonString ARCtrl.Json.ARC.ROCrate.decoder s
ARC(?isa = isa)

/// exports in json-ld format
static member toROCrateJsonString(?spaces) =
fun (obj:ARC) ->
ARCtrl.Json.ARC.ROCrate.encoder (Option.get obj.ISA)
|> ARCtrl.Json.Encode.toJsonString (ARCtrl.Json.Encode.defaultSpaces spaces)

//-Pseudo code-//
//// Option 1
//let fs, readcontracts = ARC.FSFromFilePaths filepaths
Expand Down
2 changes: 1 addition & 1 deletion src/Core/ARCtrl.Core.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@
<Compile Include="Conversion.fs" />
<Compile Include="IdentifierSetters.fs" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<ProjectReference Include="..\CWL\ARCtrl.CWL.fsproj" />
<ProjectReference Include="..\FileSystem\ARCtrl.FileSystem.fsproj" />
</ItemGroup>
<PropertyGroup>
Expand Down
30 changes: 30 additions & 0 deletions src/Json/ARC.fs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
namespace ARCtrl.Json

open Thoth.Json.Core

open ARCtrl
open ARCtrl.Helper

module ARC =

/// Functions for serializing and deserializing ARC objects to RO-Crate Root Data Entity
///
/// See https://www.researchobject.org/ro-crate/1.1/root-data-entity.html for more information
module ROCrate =

let encoder (isa : ArcInvestigation) =
[
Encode.tryInclude "@type" Encode.string (Some "CreativeWork")
Encode.tryInclude "@id" Encode.string (Some "ro-crate-metadata.json")
Encode.tryInclude "about" Investigation.ROCrate.encoder (Some isa)
"conformsTo", ROCrateContext.ROCrate.conformsTo_jsonvalue
"@context", ROCrateContext.ROCrate.context_jsonvalue
]
|> Encode.choose
|> Encode.object

let decoder : Decoder<ArcInvestigation option> =
Decode.object (fun get ->
let isa = get.Optional.Field "about" Investigation.ROCrate.decoder
isa
)
1 change: 1 addition & 0 deletions src/Json/ARCtrl.Json.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
<Compile Include="Assay.fs" />
<Compile Include="Study.fs" />
<Compile Include="Investigation.fs" />
<Compile Include="ARC.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="NJsonSchema" Version="10.8.0" />
Expand Down
16 changes: 8 additions & 8 deletions src/Json/Investigation.fs
Original file line number Diff line number Diff line change
Expand Up @@ -229,14 +229,14 @@ module InvestigationExtensions =
let spaces = defaultArg spaces 0
Encode.toJsonString spaces (Compression.encode Investigation.encoderCompressed obj)

//static member fromROCrateJsonString (s:string) =
// Decode.fromJsonString Investigation.ROCrate.decoder s

///// exports in json-ld format
//static member toROCrateJsonString(?spaces) =
// fun (obj:ArcInvestigation) ->
// Investigation.ROCrate.encoder obj
// |> Encode.toJsonString (Encode.defaultSpaces spaces)
static member fromROCrateJsonString (s:string) =
Decode.fromJsonString Investigation.ROCrate.decoder s

/// exports in json-ld format
static member toROCrateJsonString(?spaces) =
fun (obj:ArcInvestigation) ->
Investigation.ROCrate.encoder obj
|> Encode.toJsonString (Encode.defaultSpaces spaces)

static member toISAJsonString(?spaces) =
fun (obj:ArcInvestigation) ->
Expand Down
16 changes: 8 additions & 8 deletions src/Json/Study.fs
Original file line number Diff line number Diff line change
Expand Up @@ -228,14 +228,14 @@ module StudyExtensions =
let spaces = defaultArg spaces 0
Encode.toJsonString spaces (Compression.encode Study.encoderCompressed obj)

//static member fromROCrateJsonString (s:string) =
// Decode.fromJsonString Study.ROCrate.decoder s

///// exports in json-ld format
//static member toROCrateJsonString(?spaces) =
// fun (obj:ArcStudy) ->
// Study.ROCrate.encoder obj
// |> Encode.toJsonString (Encode.defaultSpaces spaces)
static member fromROCrateJsonString (s:string) =
Decode.fromJsonString Study.ROCrate.decoder s

/// exports in json-ld format
static member toROCrateJsonString(?spaces) =
fun (obj:ArcStudy) ->
Study.ROCrate.encoder obj
|> Encode.toJsonString (Encode.defaultSpaces spaces)

static member toISAJsonString(?spaces) =
fun (obj:ArcStudy) ->
Expand Down

0 comments on commit e3437b2

Please sign in to comment.