mod groups;
mod items;
mod publishing;
mod search;
mod sharing;
mod users;
use crate::ArcGISClient;
use tracing::instrument;
#[derive(Clone)]
pub struct PortalClient<'a> {
pub(super) base_url: String,
pub(super) client: &'a ArcGISClient,
}
impl<'a> PortalClient<'a> {
#[instrument(skip(base_url, client))]
pub fn new(base_url: impl Into<String>, client: &'a ArcGISClient) -> Self {
let base_url = base_url.into();
tracing::debug!(base_url = %base_url, "Creating PortalClient");
Self { base_url, client }
}
#[instrument(skip(client))]
pub fn agol(client: &'a ArcGISClient) -> Self {
tracing::debug!("Creating PortalClient for ArcGIS Online");
Self::new("https://www.arcgis.com/sharing/rest", client)
}
#[instrument(skip(client))]
pub fn enterprise(client: &'a ArcGISClient) -> crate::Result<Self> {
tracing::debug!("Creating PortalClient for ArcGIS Enterprise");
let config = crate::EnvConfig::global();
let portal_url = config.arcgis_enterprise_portal.as_ref().ok_or_else(|| {
tracing::error!("ARCGIS_ENTERPRISE_PORTAL not found in environment");
crate::Error::from(crate::ErrorKind::Env(crate::EnvError::new(
std::env::VarError::NotPresent,
)))
})?;
tracing::debug!(portal_url = %portal_url, "Using Enterprise portal URL");
Ok(Self::new(portal_url.clone(), client))
}
pub fn base_url(&self) -> &str {
&self.base_url
}
}