Skip to content

Commit

Permalink
chore: decode object examples, introduce Query.
Browse files Browse the repository at this point in the history
  • Loading branch information
n1k0 committed Sep 26, 2024
1 parent a3a0768 commit 1f20c6e
Show file tree
Hide file tree
Showing 5 changed files with 75 additions and 9 deletions.
1 change: 1 addition & 0 deletions bin/build-db
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ const elmWithFixtures = elmTemplate
)
.replace("%foodProductExamplesJson%", parseAndValidate("public/data/food/examples.json", "id"))
// Object JSON data
.replace("%objectExamplesJson%", parseAndValidate("public/data/object/examples.json", "id"))
.replace(
"%objectProcessesJson%",
parseAndValidate(
Expand Down
15 changes: 11 additions & 4 deletions src/Data/Object/Db.elm
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,31 @@ module Data.Object.Db exposing
, buildFromJson
)

import Data.Example as Example exposing (Example)
import Data.Impact as Impact
import Data.Object.Process as Process exposing (Process)
import Data.Object.Query as Query exposing (Query)
import Json.Decode as Decode
import Result.Extra as RE


type alias Db =
{ processes : List Process }
{ examples : List (Example Query)
, processes : List Process
}


buildFromJson : String -> Result String Db
buildFromJson objectProcessesJson =
buildFromJson : String -> String -> Result String Db
buildFromJson objectExamplesJson objectProcessesJson =
objectProcessesJson
|> Decode.decodeString (Process.decodeList Impact.decodeImpacts)
|> Result.mapError Decode.errorToString
|> Result.andThen
(\processes ->
Ok Db
-- FIXME: add more stuff to Db, eg. examples
|> RE.andMap
(objectExamplesJson
|> Example.decodeListFromJsonString Query.decode
)
|> RE.andMap (Ok processes)
)
24 changes: 20 additions & 4 deletions src/Data/Object/Process.elm
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
module Data.Object.Process exposing
( Process
( Id
, Process
, decodeId
, decodeList
, encode
)
Expand All @@ -11,11 +13,15 @@ import Json.Decode.Pipeline as Pipe
import Json.Encode as Encode


type Id
= Id Uuid


type alias Process =
{ comment : String
, density : Float
, displayName : String
, id : Uuid
, id : Id
, impacts : Impacts
, name : String
, source : String
Expand All @@ -29,13 +35,18 @@ decodeProcess impactsDecoder =
|> Pipe.required "comment" Decode.string
|> Pipe.required "density" Decode.float
|> Pipe.required "display_name" Decode.string
|> Pipe.required "id" Uuid.decoder
|> Pipe.required "id" decodeId
|> Pipe.required "impacts" impactsDecoder
|> Pipe.required "name" Decode.string
|> Pipe.required "source" Decode.string
|> Pipe.required "unit" Decode.string


decodeId : Decoder Id
decodeId =
Decode.map Id Uuid.decoder


decodeList : Decoder Impact.Impacts -> Decoder (List Process)
decodeList impactsDecoder =
Decode.list (decodeProcess impactsDecoder)
Expand All @@ -47,9 +58,14 @@ encode process =
[ ( "comment", Encode.string process.comment )
, ( "density", Encode.float process.density )
, ( "displayName", Encode.string process.displayName )
, ( "id", Uuid.encoder process.id )
, ( "id", encodeId process.id )
, ( "impacts", Impact.encode process.impacts )
, ( "name", Encode.string process.name )
, ( "source", Encode.string process.source )
, ( "unit", Encode.string process.unit )
]


encodeId : Id -> Encode.Value
encodeId (Id uuid) =
Uuid.encoder uuid
37 changes: 37 additions & 0 deletions src/Data/Object/Query.elm
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
module Data.Object.Query exposing
( Amount
, Item
, Query
, decode
)

import Data.Object.Process as Process
import Json.Decode as Decode exposing (Decoder)


type alias Query =
{ items : List Item
}


type alias Item =
{ amount : Amount
, processId : Process.Id
}


type Amount
= Amount Float


decode : Decoder Query
decode =
Decode.map Query
(Decode.field "processes" (Decode.list decodeItem))


decodeItem : Decoder Item
decodeItem =
Decode.map2 Item
(Decode.field "amount" (Decode.map Amount Decode.float))
(Decode.field "process_id" Process.decodeId)
7 changes: 6 additions & 1 deletion src/Static/Json.elm-template
Original file line number Diff line number Diff line change
Expand Up @@ -86,14 +86,19 @@ transportsJson =
"""%transportsJson%"""


objectExamplesJson : String
objectExamplesJson =
"""%objectExamplesJson%"""


objectProcessesJson : String
objectProcessesJson =
"""%objectProcessesJson%"""


objectDb : String -> Result String ObjectDb.Db
objectDb objectProcesses =
ObjectDb.buildFromJson objectProcesses
ObjectDb.buildFromJson objectExamplesJson objectProcesses


rawJsonProcesses : RawJsonProcesses
Expand Down

0 comments on commit 1f20c6e

Please sign in to comment.