Something went wrong. Try again.
Thinking about how to model ssb uris in Gleam
Something went wrong. Try again.
3.2 kB · 118 lines · Created 2mo ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118// From SIP 01:// - **Canonical SSB URIs**// - `ssb:message/classic/<MSGID>`// - `ssb:message/bendybutt-v1/<MSGID>`// - `ssb:message/gabbygrove-v1/<MSGID>`// - `ssb:message/buttwoo-v1/<MSGID>`// - `ssb:feed/classic/<FEEDID>`// - `ssb:feed/bendybutt-v1/<FEEDID>`// - `ssb:feed/gabbygrove-v1/<FEEDID>`// - `ssb:feed/buttwoo-v1/<FEEDID>`// - `ssb:feed/buttwoo-v1/<FEEDID>/<PARENTMSGID>`// - `ssb:blob/classic/<BLOBID>`// - `ssb:address/multiserver?multiserverAddress=<MSADDR>`// - `ssb:encryption-key/box2-dm-dh/<KEY>`// - `ssb:identity/po-box/<KEY>`// - `ssb:identity/fusion/<KEY>`pub type SsbUri { Canonical(CanonicalUri) Experimental(ExperimentalUri)}
// note: For Deprecated SSB URIs they should be treated syntactically as Canonical URIs,// the semantic level is where they should be treated differently (ex: emit warnings)// - **Deprecated SSB URIs**// - `ssb:message/sha256/<MSGID>`// - `ssb:feed/ed25519/<FEEDID>`// - `ssb:blob/sha256/<BLOBID>`
pub type CanonicalUri { Message(MessageUri) Feed(FeedUri) Blob(BlobUri) Address(AddressUri) EncryptionKey(EncryptionKeyUri) Identity(IdentityUri)}
// - `ssb:message/classic/<MSGID>`// - `ssb:message/bendybutt-v1/<MSGID>`// - `ssb:message/gabbygrove-v1/<MSGID>`// - `ssb:message/buttwoo-v1/<MSGID>`pub type MessageUri { ClassicMessage(ClassicMessageId) BendyButtMessage(BendyButtMessageId) GabbyGroveV1Message(GabbyGroveV1MessageId) ButtWooV1Message(ButtWooV1MessageId)}
pub opaque type ClassicMessageId { ClassicMessageId(BitArray)}
pub opaque type BendyButtMessageId { BendyButtMessageId(BitArray)}
pub opaque type GabbyGroveV1MessageId { GabbyGroveV1MessageId(BitArray)}
pub opaque type ButtWooV1MessageId { ButtWooV1MessageId(BitArray)}
// - `ssb:feed/classic/<FEEDID>`// - `ssb:feed/bendybutt-v1/<FEEDID>`// - `ssb:feed/gabbygrove-v1/<FEEDID>`// - `ssb:feed/buttwoo-v1/<FEEDID>`// - `ssb:feed/buttwoo-v1/<FEEDID>/<PARENTMSGID>`pub type FeedUri
// - `ssb:blob/classic/<BLOBID>`pub type BlobUri
// - `ssb:address/multiserver?multiserverAddress=<MSADDR>`pub type AddressUri { MultiServerAddress(MultiServerAddressUri)}
pub opaque type MultiServerAddressUri { MultiServerAddressUri(String)}
// - `ssb:encryption-key/box2-dm-dh/<KEY>`pub type EncryptionKeyUri { Box2DmDh(Box2DmDhKey)}
pub opaque type Box2DmDhKey { Box2DmDhKey(BitArray)}
// - `ssb:identity/po-box/<KEY>`// - `ssb:identity/fusion/<KEY>`pub type IdentityUri { PoBox(PoBoxKey) Fusion(FusionKey)}
pub opaque type PoBoxKey { PoBoxKey(BitArray)}
pub opaque type FusionKey { FusionKey(BitArray)}
// - **Experimental SSB URIs**// - `ssb:experimental?action=claim-http-invite&invite=<CODE>&multiserverAddress=<MSADDR>`// - `ssb:experimental?action=consume-alias&alias=<A>&userId=<UID>&signature=<SIG>&roomId=<RID>&multiserverAddress=<MSADDR>`// - `ssb:experimental?action=start-http-auth&sid=<SID>&sc=<SC>`pub type ExperimentalUri// similar to canonical?
// Questions:// Because Gleam doesn't have typeclasses, should I aim for a flatter type hierachy? // Is my current design overkill/cumbersome in Gleam?