Current section
Files
Jump to
Current section
Files
src/example/schema.gleam
import gleam/dynamic/decode
import gloo/schema.{type Table, Table}
// ── User ───────────────────────────────────────────────────────────────────
pub type User {
User(id: Int, email: String, name: String)
}
pub fn users() -> Table(User) {
let decoder = {
use id <- decode.field(0, decode.int)
use email <- decode.field(1, decode.string)
use name <- decode.field(2, decode.string)
decode.success(User(id:, email:, name:))
}
Table(name: "users", primary_key: "id", decoder:)
}
// ── Post ───────────────────────────────────────────────────────────────────
pub type Post {
Post(id: Int, user_id: Int, body: String)
}
pub fn posts() -> Table(Post) {
let decoder = {
use id <- decode.field(0, decode.int)
use user_id <- decode.field(1, decode.int)
use body <- decode.field(2, decode.string)
decode.success(Post(id:, user_id:, body:))
}
Table(name: "posts", primary_key: "id", decoder:)
}
// ── Follow ─────────────────────────────────────────────────────────────────
pub type Follow {
Follow(follower_id: Int, followee_id: Int)
}
pub fn follows() -> Table(Follow) {
let decoder = {
use follower_id <- decode.field(0, decode.int)
use followee_id <- decode.field(1, decode.int)
decode.success(Follow(follower_id:, followee_id:))
}
Table(name: "follows", primary_key: "follower_id", decoder:)
}