azure_sdk_cosmos 0.100.3

Rust wrappers around Microsoft Azure REST APIs - Azure Cosmos DB crate
Documentation
use crate::requests;
use crate::traits::*;
use azure_sdk_core::No;
use std::borrow::Cow;
use std::marker::PhantomData;

#[derive(Debug, Clone)]
pub struct TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    collection_client: Cow<'a, COLL>,
    trigger_name: Cow<'a, str>,
    p_c: PhantomData<C>,
    p_d: PhantomData<D>,
}

impl<'a, C, D, COLL> TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    pub(crate) fn new(collection_client: Cow<'a, COLL>, trigger_name: Cow<'a, str>) -> Self {
        Self {
            collection_client,
            trigger_name,
            p_c: PhantomData {},
            p_d: PhantomData {},
        }
    }
}

impl<'a, C, D, COLL> HasHyperClient for TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    #[inline]
    fn hyper_client(
        &self,
    ) -> &hyper::Client<hyper_rustls::HttpsConnector<hyper::client::HttpConnector>> {
        self.collection_client.hyper_client()
    }
}

impl<'a, C, D, COLL> HasCosmosClient<C> for TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    #[inline]
    fn cosmos_client(&self) -> &C {
        self.collection_client.cosmos_client()
    }
}

impl<'a, C, D, COLL> HasDatabaseClient<C, D> for TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    #[inline]
    fn database_client(&self) -> &D {
        self.collection_client.database_client()
    }
}

impl<'a, C, D, COLL> HasCollectionClient<C, D, COLL> for TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    #[inline]
    fn collection_client(&self) -> &COLL {
        &self.collection_client
    }
}

impl<'a, C, D, COLL> TriggerClient<C, D, COLL> for TriggerStruct<'a, C, D, COLL>
where
    C: CosmosClient + Clone,
    D: DatabaseClient<C> + Clone,
    COLL: CollectionClient<C, D> + Clone,
{
    fn trigger_name(&self) -> &str {
        &self.trigger_name
    }

    fn create_trigger(
        &self,
    ) -> requests::CreateOrReplaceTriggerBuilder<'_, C, D, COLL, No, No, No> {
        requests::CreateOrReplaceTriggerBuilder::new(self, true)
    }

    fn replace_trigger(
        &self,
    ) -> requests::CreateOrReplaceTriggerBuilder<'_, C, D, COLL, No, No, No> {
        requests::CreateOrReplaceTriggerBuilder::new(self, false)
    }

    fn delete_trigger(&self) -> requests::DeleteTriggerBuilder<'_, '_, C, D, COLL> {
        requests::DeleteTriggerBuilder::new(self)
    }
}