use std::{collections::HashMap, sync::Arc, time::Instant};
use url::Url;
use super::{CosmosEndpoint, UnavailableReason};
#[derive(Clone, Debug)]
pub(crate) struct AccountEndpointState {
pub generation: u64,
pub preferred_read_endpoints: Arc<[CosmosEndpoint]>,
pub preferred_write_endpoints: Arc<[CosmosEndpoint]>,
pub unavailable_endpoints: HashMap<Url, (Instant, UnavailableReason)>,
pub multiple_write_locations_enabled: bool,
pub default_endpoint: CosmosEndpoint,
}
impl AccountEndpointState {
pub fn single(default_endpoint: CosmosEndpoint) -> Self {
Self {
generation: 0,
preferred_read_endpoints: vec![default_endpoint.clone()].into(),
preferred_write_endpoints: vec![default_endpoint.clone()].into(),
unavailable_endpoints: HashMap::new(),
multiple_write_locations_enabled: false,
default_endpoint,
}
}
pub fn preferred_endpoints(&self, read_only: bool) -> &[CosmosEndpoint] {
if read_only {
&self.preferred_read_endpoints
} else {
&self.preferred_write_endpoints
}
}
}