Skip to main content

GaiaClient

Struct GaiaClient 

Source
pub struct GaiaClient { /* private fields */ }
Expand description

A client for interacting with the Gaia secret management daemon.

The client uses mutual TLS (mTLS) for secure communication and provides methods to retrieve secrets and check daemon status.

Implementations§

Source§

impl GaiaClient

Source

pub async fn connect(config: GaiaClientConfig) -> Result<Self>

Connects to the Gaia daemon using the provided configuration.

§Arguments
  • config - Configuration containing server address and TLS certificates
§Errors

Returns an error if:

  • TLS certificates cannot be loaded
  • Connection to the daemon fails
§Example
use gaia_client::{GaiaClient, GaiaClientConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = GaiaClientConfig::new(
        "localhost:50051",
        "/etc/gaia/certs/ca.crt",
        "/etc/gaia/certs/client.crt",
        "/etc/gaia/certs/client.key",
    );

    let client = GaiaClient::connect(config).await?;
    Ok(())
}
Source

pub async fn get_secret(&mut self, namespace: &str, id: &str) -> Result<Secret>

Retrieves a secret from the specified namespace.

§Arguments
  • namespace - The namespace containing the secret
  • id - The secret identifier
§Errors

Returns an error if:

  • The daemon is locked
  • The secret does not exist
  • A network error occurs
§Example
let secret = client.get_secret("production", "database_url").await?;
println!("Secret: {}", secret.value);
Source

pub async fn list_secrets( &mut self, namespace: Option<String>, ) -> Result<Vec<Namespace>>

Lists all secrets for the authenticated client.

Returns secrets from the client’s own namespaces plus the common namespace. If a namespace filter is provided, only secrets from that namespace are returned.

§Arguments
  • namespace - Optional namespace filter
§Example
// Get all secrets (client's own + common)
let all_secrets = client.list_secrets(None).await?;

// Get only secrets from a specific namespace
let prod_secrets = client.list_secrets(Some("production".to_string())).await?;

for namespace in all_secrets {
    println!("Namespace: {}", namespace.name);
    for secret in namespace.secrets {
        println!("  - {}: {}", secret.id, secret.value);
    }
}
Source

pub async fn load_env(&mut self, options: Option<LoadEnvOptions>) -> Result<()>

Fetches all accessible secrets and loads them into the current process’s environment.

By default, environment variables are named after the secret key, converted to uppercase with hyphens replaced by underscores. Optional prefix and namespace inclusion can be configured via LoadEnvOptions.

§Arguments
  • options - Optional configuration for env var naming
§Example
// Load with default behavior (key only)
client.load_env(None).await?;

// Load with prefix and namespace: GAIA_PRODUCTION_DATABASE_URL
client.load_env(Some(LoadEnvOptions::new().with_prefix("GAIA").with_namespace(true))).await?;

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more