Sign in

    googleapis

    MoonBit client library for Google REST APIs

    google
    googleapis
    rest
    api
    Download zip
    Author
    Version
    0.4.1
    License
    Apache-2.0
    Last updated
    5 months ago
    Downloads
    489

    #ryota0624/googleapis

    MoonBit client library for Google REST APIs.

    Works on both native and js targets via HTTP/1.1.

    #Features

    • HttpClient trait with pluggable implementation (default: mizchi/x/http)
    • GoogleClient - async token provider, auto-injected auth headers, error parsing
    • Protobuf-based code generator - generate typed MoonBit clients from buf Image JSON
      • Path / query / body parameters
      • Repeated (array) query parameters
      • POST request body serialization
      • Server-streaming responses
    • 10 generated Google API clients - Cloud Storage, Firestore, BigQuery Storage, Pub/Sub, Logging, Cloud Tasks, Cloud Scheduler, Cloud Trace, Monitoring, Error Reporting

    #Installation

    { "deps": { "ryota0624/googleapis": "0.3.0" } }

    #Quick Start

    #Firestore - List 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 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)")
    }
    }

    #Cloud Storage - List objects

    ///|
    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)")
    }
    }

    #Run samples

    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

    #Code Generator

    Generate typed MoonBit clients from the googleapis protobuf repository using buf:

    # 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)

    CLI options:

    OptionDefaultDescription
    <proto_package>(required)e.g. google.firestore.v1
    --image <path>/tmp/googleapis-image.jsonPath to buf Image JSON
    --output <dir>stdoutOutput directory

    The generator produces three files per service:

    FileContents
    types.mbtStructs with FromJson / ToJson derives
    client.mbtAsync service methods with typed parameters
    helpers.mbtURL encoding and query-string utilities

    #Generated Services

    ServicePackageProto package
    Cloud Storagegenerated/storagegoogle.storage.v2
    Cloud Firestoregenerated/firestoregoogle.firestore.v1
    BigQuery Storagegenerated/bigquerygoogle.cloud.bigquery.storage.v1
    Cloud Pub/Subgenerated/pubsubgoogle.pubsub.v1
    Cloud Logginggenerated/logginggoogle.logging.v2
    Cloud Tasksgenerated/cloudtasksgoogle.cloud.tasks.v2
    Cloud Schedulergenerated/cloudschedulergoogle.cloud.scheduler.v1
    Cloud Tracegenerated/cloudtracegoogle.devtools.cloudtrace.v2
    Cloud Monitoringgenerated/monitoringgoogle.monitoring.v3
    Error Reportinggenerated/clouderrorreportinggoogle.devtools.clouderrorreporting.v1beta1

    #Package Structure

    PackageDescription
    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)

    #Authentication

    This library does not handle token acquisition. Pass an access token obtained from:

    GoogleClient accepts a token provider function, so tokens can be refreshed dynamically:

    ///|
    let client = @core.GoogleClient::new(fn() { get_fresh_token() })

    #Dependencies

    #License

    Apache-2.0

    Powered by MoonBit

    Site sourceReport issuePackagesBuild queueSkillsStatistics

    © 2026 mooncakes.io