MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / build_client_with_org

Function build_client_with_org

atomic-cli/src/commands/client.rs:65–131  ·  view source on GitHub ↗

Build a [`StorageClient`] and return the resolved org slug alongside it. Useful for commands that also need to resolve org-scoped state (e.g. per-org default workspace lookup). Avoids resolving the org twice.

(
    org_override: Option<&str>,
    server_override: Option<&str>,
)

Source from the content-addressed store, hash-verified

63/// Useful for commands that also need to resolve org-scoped state (e.g.
64/// per-org default workspace lookup). Avoids resolving the org twice.
65pub async fn build_client_with_org(
66 org_override: Option<&str>,
67 server_override: Option<&str>,
68) -> CliResult<(StorageClient, String)> {
69 let config = GlobalConfig::load()
70 .map_err(|e| CliError::Internal(anyhow::anyhow!("Failed to load global config: {}", e)))?;
71
72 // Resolve the server profile (named or legacy).
73 let server = config
74 .resolve_server(server_override)
75 .map_err(|e| CliError::Internal(anyhow::anyhow!("{}", e)))?
76 .0;
77
78 let server_url = server.url.clone().ok_or_else(|| {
79 let hint = if let Some(name) = server_override {
80 format!("Server profile '{}' has no URL configured.", name)
81 } else {
82 "Server not configured. Run 'atomic identity register <server-url>' first.".to_string()
83 };
84 CliError::Internal(anyhow::anyhow!("{}", hint))
85 })?;
86
87 let org_slug = resolve_org_with_server(org_override, server)?;
88
89 let base_url = server.org_base_url(&org_slug).ok_or_else(|| {
90 CliError::Internal(anyhow::anyhow!(
91 "Could not build org URL from server config"
92 ))
93 })?;
94
95 // Resolve identity: per-server override → global default.
96 let store = IdentityStore::open_default()
97 .map_err(|e| CliError::Internal(anyhow::anyhow!("Failed to open identity store: {}", e)))?;
98
99 let identity = if let Some(ref identity_name) = server.identity {
100 // Server profile specifies an identity — use it.
101 store.load_by_name(identity_name).map_err(|e| {
102 CliError::Internal(anyhow::anyhow!(
103 "Identity '{}' specified by server profile not found: {}",
104 identity_name,
105 e
106 ))
107 })?
108 } else {
109 // Fall back to global default identity.
110 store
111 .get_default()
112 .map_err(|e| {
113 CliError::Internal(anyhow::anyhow!("Failed to load default identity: {}", e))
114 })?
115 .ok_or_else(|| {
116 CliError::Internal(anyhow::anyhow!(
117 "No default identity set. Create one first:\n \
118 atomic identity new <name> --email <email> --set-default"
119 ))
120 })?
121 };
122

Callers 7

build_clientFunction · 0.85
runMethod · 0.85
verify_workspace_existsFunction · 0.85
runMethod · 0.85
executeMethod · 0.85
runMethod · 0.85
verify_org_existsFunction · 0.85

Calls 7

resolve_org_with_serverFunction · 0.85
get_tokenFunction · 0.85
resolve_serverMethod · 0.80
org_base_urlMethod · 0.80
load_by_nameMethod · 0.80
cloneMethod · 0.45
get_defaultMethod · 0.45

Tested by

no test coverage detected