pub trait CredentialStore {
// Required methods
fn get_credentials(
&self,
instance: &str,
) -> Result<Option<Credentials>, KalamLinkError>;
fn set_credentials(
&mut self,
credentials: &Credentials,
) -> Result<(), KalamLinkError>;
fn delete_credentials(
&mut self,
instance: &str,
) -> Result<(), KalamLinkError>;
fn list_instances(&self) -> Result<Vec<String>, KalamLinkError>;
// Provided method
fn has_credentials(&self, instance: &str) -> Result<bool, KalamLinkError> { ... }
}Expand description
Trait for credential storage backends.
Implementations can store credentials in files, environment variables, secure keychains, browser localStorage, or any other storage mechanism.
§Security Note
Implementations MUST ensure credentials are stored securely:
- Files should use restrictive permissions (0600 on Unix)
- Passwords should never be logged
- Consider encryption for sensitive deployments
§Example Implementation
use kalam_client::credentials::{CredentialStore, Credentials};
struct MyCredentialStore;
impl CredentialStore for MyCredentialStore {
fn get_credentials(&self, instance: &str) -> Result<Option<Credentials>> {
// Read from your storage backend
Ok(None)
}
fn set_credentials(&mut self, credentials: &Credentials) -> Result<()> {
// Write to your storage backend
Ok(())
}
fn delete_credentials(&mut self, instance: &str) -> Result<()> {
// Remove from your storage backend
Ok(())
}
fn list_instances(&self) -> Result<Vec<String>> {
// List all stored instances
Ok(vec![])
}
}Required Methods§
Sourcefn get_credentials(
&self,
instance: &str,
) -> Result<Option<Credentials>, KalamLinkError>
fn get_credentials( &self, instance: &str, ) -> Result<Option<Credentials>, KalamLinkError>
Retrieve credentials for a specific database instance
Returns Ok(None) if no credentials are stored for the instance.
§Arguments
instance- Instance identifier (e.g., “local”, “production”)
Sourcefn set_credentials(
&mut self,
credentials: &Credentials,
) -> Result<(), KalamLinkError>
fn set_credentials( &mut self, credentials: &Credentials, ) -> Result<(), KalamLinkError>
Store credentials for a database instance
Overwrites existing credentials for the same instance.
§Arguments
credentials- Credentials to store
Sourcefn delete_credentials(&mut self, instance: &str) -> Result<(), KalamLinkError>
fn delete_credentials(&mut self, instance: &str) -> Result<(), KalamLinkError>
Delete stored credentials for an instance
Returns Ok(()) even if no credentials were stored.
§Arguments
instance- Instance identifier to delete
Sourcefn list_instances(&self) -> Result<Vec<String>, KalamLinkError>
fn list_instances(&self) -> Result<Vec<String>, KalamLinkError>
List all stored instance identifiers
Returns a vector of instance names that have stored credentials.
Provided Methods§
Sourcefn has_credentials(&self, instance: &str) -> Result<bool, KalamLinkError>
fn has_credentials(&self, instance: &str) -> Result<bool, KalamLinkError>
Check if credentials exist for an instance
Default implementation calls get_credentials() and checks for Some.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".