this repo has no description
lustre frontent oat-ui gleam
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

:label: add User decoder

+22 -1
+5 -1
shared/src/shared/session.gleam
··· 3 3 import shared/user 4 4 5 5 pub type Session { 6 + /// User is sucessfully authenticated 6 7 Authenticated(user: user.User) 8 + /// User is waiting for the Server to validate their credentials 7 9 Pending(on_success: route.Route, on_error: route.Route) 8 10 11 + /// User is not logged out 9 12 None 10 13 } 11 14 12 15 pub fn decoder() -> decode.Decoder(Session) { 13 16 use variant <- decode.field("type", decode.string) 17 + 14 18 case variant { 15 19 "authenticated" -> { 16 - use user <- decode.field("user", todo) 20 + use user <- decode.field("user", user.decoder()) 17 21 decode.success(Authenticated(user:)) 18 22 } 19 23
+17
shared/src/shared/user.gleam
··· 1 + import gleam/dynamic/decode 1 2 import youid/uuid 2 3 3 4 pub type User { 4 5 User(id: uuid.Uuid, full_name: String, email: String) 5 6 } 7 + 8 + pub fn decoder() -> decode.Decoder(User) { 9 + use id <- decode.field("id", uuid_decoder()) 10 + use full_name <- decode.field("full_name", decode.string) 11 + use email <- decode.field("email", decode.string) 12 + 13 + decode.success(User(id:, full_name:, email:)) 14 + } 15 + 16 + fn uuid_decoder() -> decode.Decoder(uuid.Uuid) { 17 + use str <- decode.then(decode.string) 18 + case uuid.from_string(str) { 19 + Ok(value) -> decode.success(value) 20 + Error(_) -> decode.failure(uuid.v7(), "Uuid") 21 + } 22 + }