Skip to main content

src/gflare_ffi_bindings.mjs

import { Ok, Error } from "./gleam.mjs";

function cast_kv(raw) {
  if (raw && typeof raw.get === "function" && typeof raw.put === "function" && typeof raw.delete === "function" && typeof raw.list === "function") {
    return new Ok(raw);
  }
  return new Error("Not a KV namespace");
}

function cast_d1(raw) {
  if (raw && typeof raw.prepare === "function" && typeof raw.batch === "function" && typeof raw.exec === "function") {
    return new Ok(raw);
  }
  return new Error("Not a D1 database");
}

function cast_r2(raw) {
  if (raw && typeof raw.get === "function" && typeof raw.put === "function" && typeof raw.delete === "function" && typeof raw.list === "function") {
    return new Ok(raw);
  }
  return new Error("Not an R2 bucket");
}

function cast_do(raw) {
  if (raw && typeof raw.idFromName === "function" && typeof raw.get === "function") {
    return new Ok(raw);
  }
  return new Error("Not a Durable Object namespace");
}

function cast_queue(raw) {
  if (raw && typeof raw.send === "function" && typeof raw.sendBatch === "function") {
    return new Ok(raw);
  }
  return new Error("Not a Queue");
}

export function get_kv(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`KV binding "${name}" not found`);
  }
  return cast_kv(raw);
}

export function get_d1(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`D1 binding "${name}" not found`);
  }
  return cast_d1(raw);
}

export function get_r2(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`R2 binding "${name}" not found`);
  }
  return cast_r2(raw);
}

export function get_do_namespace(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`Durable Object binding "${name}" not found`);
  }
  return cast_do(raw);
}

export function get_queue_producer(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`Queue binding "${name}" not found`);
  }
  return cast_queue(raw);
}

export function get_var(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`Variable "${name}" not found`);
  }
  return new Ok(`${raw}`);
}

export function get_secret(env, name) {
  const raw = env[name];
  if (raw === undefined || raw === null) {
    return new Error(`Secret "${name}" not found`);
  }
  return new Ok(`${raw}`);
}