Skip to content

Amend Rust client api I can create store object pointing to local or remote server #1019

Open
@AlexMikhalev

Description

@AlexMikhalev

I have tried to build a new example:

use atomic_lib::{agents::Agent, errors::AtomicResult, Resource, Store, Storelike};
use std::env;

/// Creates a new Class resource in an Atomic Data store.
/// Requires two environment variables:
/// - ATOMIC_SERVER_URL: The base URL of the Atomic Server (e.g., "https://atomicdata.dev")
/// - ATOMIC_AGENT_SECRET: The private key of the Agent that will create the Class
///
/// # Returns
/// - `AtomicResult<String>`: The subject URL of the newly created Class
///
/// # Example usage:
/// ```bash
/// export ATOMIC_SERVER_URL="https://localhost:9883"
/// export ATOMIC_AGENT_SECRET="secret_key_here"
/// cargo run
/// ```
fn main() -> AtomicResult<()> {
    // Initialize store with server URL from environment
    let server_url = env::var("ATOMIC_SERVER_URL")
        .map_err(|_| "ATOMIC_SERVER_URL environment variable not set")?;
    let mut store = Store::init()?;
    println!("Server URL: {}", store.get_server_url());
    // Initialize agent from secret
    let agent_secret = env::var("ATOMIC_AGENT_SECRET")
        .map_err(|_| "ATOMIC_AGENT_SECRET environment variable not set")?;
    let agent = Agent::from_secret(&agent_secret)?;
    store.set_default_agent(agent);

    // Create a new Class instance
    let mut class_resource =
        Resource::new_instance("https://atomicdata.dev/classes/Class", &store)?;

    // Set required properties for the Class
    class_resource
        // shortname is required for all Classes
        .set_shortname("shortname", "person", &store)?
        // description is required for all Classes
        .set_shortname(
            "description",
            "Represents a human being with various properties",
            &store,
        )?;

    // Save the resource to the server
    // This will create a Commit and send it to the server
    class_resource.save(&store)?;

    let subject = class_resource.get_subject();
    println!("Successfully created new Class!");
    println!("Subject URL: {}", subject);

    Ok(())
}

I can create a store object in Javascript and pass the Atomic Server URL and Agent (secret).
I can't figure out how to do it in Rust.

Metadata

Metadata

Assignees

Labels

blockerDrastically limits user - Need help urgently

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions