use std::path::PathBuf;
use std::sync::Arc;
use std::time::Duration;
use super::clock::Clock;
use super::fingerprint::MachineFingerprint;
use super::store::SecretBackend;
use super::transport::Transport;
pub(crate) struct LicenseManagerOptions {
pub product_id: String,
pub public_key: String,
pub fingerprint: Option<MachineFingerprint>,
pub version: String,
pub machine_name: Option<String>,
pub platform: Option<String>,
pub min_offline_duration: Duration,
pub api_base_url: Option<String>,
pub storage_dirs: Option<Vec<PathBuf>>,
pub runtime: tokio::runtime::Handle,
pub testing: Option<TestHooks>,
}
#[cfg(test)]
impl LicenseManagerOptions {
pub(crate) fn new(
product_id: impl Into<String>,
public_key: impl Into<String>,
version: impl Into<String>,
runtime: tokio::runtime::Handle,
) -> Self {
Self {
product_id: product_id.into(),
public_key: public_key.into(),
fingerprint: None,
version: version.into(),
machine_name: None,
platform: None,
min_offline_duration: Duration::ZERO,
api_base_url: None,
storage_dirs: None,
runtime,
testing: None,
}
}
}
#[doc(hidden)]
#[derive(Clone, Default)]
pub struct TestHooks {
pub transport: Option<Arc<dyn Transport>>,
pub secret_backend: Option<Option<Arc<dyn SecretBackend>>>,
pub clock: Option<Arc<dyn Clock>>,
}
impl std::fmt::Debug for TestHooks {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("TestHooks").finish_non_exhaustive()
}
}