Skip to content

okkdev/typeid_gleam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

TypeID Gleam

Package Version Hex Docs

TypeID (v0.3) implementation in Gleam.

Works on Erlang and Javascript.

Installation

gleam add typeid_gleam@1

Usage

import typeid.{type TypeId}

type User {
  // User is passed into TypeId as a phantom type
  User(id: TypeId(User), name: String)
}

type Post

pub fn main() {
  let assert Ok(id) = typeid.new("user")
  let string_id = typeid.to_string(id) // "user_01h455vb4pex5vsknk084sn02q"

  let assert Ok(id) = typeid.parse(string_id)
  typeid.prefix(id) // "user"
  typeid.suffix(id) // "01h455vb4pex5vsknk084sn02q"

  let user_json = "{ \"id\": \"user_01h455vb4pex5vsknk084sn02q\", \"name\": \"Lucy\" }"

  let decoder = {
    // prefix is passed here to ensure the id is of type User
    use id <- decode.field("id", typeid.decode("user"))
    use name <- decode.field("name", decode.string)
    decode.success(User(id:, name:))
  }

  let assert Ok(user) = json.parse(user_json, decoder)
  user.name // "Lucy"
  typeid.prefix(user.id) // "user"
  typeid.suffix(user.id) // "01h455vb4pex5vsknk084sn02q"
  
  post_id_to_string(user.id) // won't compile because of the phantom type
}

fn post_id_to_string(id: TypeId(Post)) -> String {
  typeid.to_string(id) 
}

Further documentation can be found at https://hexdocs.pm/typeid_gleam.

Development

gleam test  # Run the tests

Many thanks to lpil for the youid UUID implementation

About

๐Ÿ”– Type-safe, unique ids for Gleam

Resources

Stars

Watchers

Forks

Packages

No packages published