use alloc::collections::BTreeMap;
use alloc::string::String;
use semver::Version;
use serde_json::Value;
#[cfg(feature = "schemars")]
use schemars::JsonSchema;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg(feature = "time")]
use time::OffsetDateTime;
use crate::{PackId, ProviderInstallId, TenantCtx};
pub type ProviderInstallRefs = BTreeMap<String, String>;
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct ProviderInstallRecord {
pub tenant: TenantCtx,
pub provider_id: String,
pub install_id: ProviderInstallId,
pub pack_id: PackId,
#[cfg_attr(
feature = "schemars",
schemars(with = "String", description = "SemVer version")
)]
pub pack_version: Version,
#[cfg(feature = "time")]
#[cfg_attr(feature = "serde", serde(with = "time::serde::rfc3339"))]
#[cfg_attr(
feature = "schemars",
schemars(with = "String", description = "RFC3339 timestamp (UTC)")
)]
pub created_at: OffsetDateTime,
#[cfg(feature = "time")]
#[cfg_attr(feature = "serde", serde(with = "time::serde::rfc3339"))]
#[cfg_attr(
feature = "schemars",
schemars(with = "String", description = "RFC3339 timestamp (UTC)")
)]
pub updated_at: OffsetDateTime,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "BTreeMap::is_empty")
)]
pub config_refs: ProviderInstallRefs,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "BTreeMap::is_empty")
)]
pub secret_refs: ProviderInstallRefs,
#[cfg_attr(feature = "serde", serde(default))]
pub webhook_state: Value,
#[cfg_attr(feature = "serde", serde(default))]
pub subscriptions_state: Value,
#[cfg_attr(feature = "serde", serde(default))]
pub metadata: Value,
}