MoonBit client library for Google REST APIs
Dependencies
{
"deps": {
"ryota0624/googleapis": "0.3.0"
}
}///|
async fn main {
let token = @sys.get_env_var("GOOGLE_ACCESS_TOKEN").unwrap()
let project = @sys.get_env_var("GCP_PROJECT").unwrap()
let client = @core.GoogleClient::new(fn() { token })
let firestore = @gfs.FirestoreService::new(client)
let parent = "projects/" + project + "/databases/(default)/documents"
let result = firestore.list_documents(
parent,
"my-collection",
page_size=Some(10),
)
match result.documents {
Some(docs) =>
for doc in docs {
println(doc.name.unwrap_or("(unnamed)"))
}
None => println("(no documents)")
}
}///|
async fn main {
let token = @sys.get_env_var("GOOGLE_ACCESS_TOKEN").unwrap()
let project = @sys.get_env_var("GCP_PROJECT").unwrap()
let client = @core.GoogleClient::new(fn() { token })
let storage = @gcs.StorageService::new(client)
let result = storage.objects_list("my-bucket")
match result.items {
Some(items) =>
for obj in items {
println(obj.name.unwrap_or("(unnamed)"))
}
None => println("(no objects)")
}
}export GOOGLE_ACCESS_TOKEN="$(gcloud auth print-access-token)"
export GCP_PROJECT="your-project-id"
# Firestore
export FIRESTORE_COLLECTION="your-collection"
moon run sample/firestore --target native
# Cloud Storage
moon run sample/storage --target native# Build the buf Image (one-time, cached in /tmp)
cd googleapis && buf build . --exclude-path preview --output json -o /tmp/googleapis-image.json
# Generate a client for a specific API
moon run codegen --target native -- google.firestore.v1 --output generated/firestore
moon run codegen --target native -- google.pubsub.v1 --output generated/pubsub
# Regenerate all bundled clients
# (mirrors the logic in .github/workflows/generate.yml)| Option | Default | Description |
|---|---|---|
| <proto_package> | (required) | e.g. google.firestore.v1 |
| --image <path> | /tmp/googleapis-image.json | Path to buf Image JSON |
| --output <dir> | stdout | Output directory |
| File | Contents |
|---|---|
| types.mbt | Structs with FromJson / ToJson derives |
| client.mbt | Async service methods with typed parameters |
| helpers.mbt | URL encoding and query-string utilities |
| Service | Package | Proto package |
|---|---|---|
| Cloud Storage | generated/storage | google.storage.v2 |
| Cloud Firestore | generated/firestore | google.firestore.v1 |
| BigQuery Storage | generated/bigquery | google.cloud.bigquery.storage.v1 |
| Cloud Pub/Sub | generated/pubsub | google.pubsub.v1 |
| Cloud Logging | generated/logging | google.logging.v2 |
| Cloud Tasks | generated/cloudtasks | google.cloud.tasks.v2 |
| Cloud Scheduler | generated/cloudscheduler | google.cloud.scheduler.v1 |
| Cloud Trace | generated/cloudtrace | google.devtools.cloudtrace.v2 |
| Cloud Monitoring | generated/monitoring | google.monitoring.v3 |
| Error Reporting | generated/clouderrorreporting | google.devtools.clouderrorreporting.v1beta1 |
| Package | Description |
|---|---|
| http/ | HttpClient trait, HttpRequest / HttpResponse types, default implementation |
| core/ | GoogleClient, auth headers, error parsing, pagination |
| codegen/ | Protobuf-based MoonBit code generator CLI |
| generated/ | Generated service clients (one sub-package per API) |
| sample/ | Usage examples (Storage, Firestore) |
///|
let client = @core.GoogleClient::new(fn() { get_fresh_token() })Install
Download zipMoonBit client library for Google REST APIs
Dependencies