Documentation
use crate::types::ConnectionId;
use async_trait::async_trait;
use rseata_core::branch::BranchType;
use rseata_core::resource::{DefaultResource, Resource};
use rseata_core::types::{ClientId, ResourceId};
use rseata_proto::rseata_proto::proto::ResourceInstruction;
use tokio::sync::mpsc::Sender;
use tonic::Status;

#[derive(Clone)]
pub struct TCResource {
    pub connection_id: ConnectionId,
    pub resource: DefaultResource,
    pub response_tx: Sender<Result<ResourceInstruction, Status>>,
}

#[async_trait]
impl Resource for TCResource {
    async fn get_resource_group_id(&self) -> String {
        self.resource.get_resource_group_id().await
    }

    async fn get_resource_id(&self) -> ResourceId {
        self.resource.get_resource_id().await
    }

    async fn get_branch_type(&self) -> BranchType {
        self.resource.get_branch_type().await
    }

    async fn get_client_id(&self) -> ClientId {
        self.resource.get_client_id().await
    }
}