use serde::{Deserialize, Serialize};
use tokio::sync::oneshot;
use aves::bus::BusRpcContext;
use aves::utils::uuid::SpectaUuid;
use super::KnowledgeDomain;
use super::types::{
CanvasDashboard, CanvasDashboardDeleteResult, CanvasDashboardLookup, CanvasDashboardSummaryList,
CreateCanvasDashboardRequest, CreateKnowledgeRequest, DataList, DataObject, DeleteCanvasDashboardRequest,
DeleteKnowledgeRequest, DeleteKnowledgeResult, GetCanvasDashboardRequest, GetKnowledgeRequest, KnowledgeError,
KnowledgeRecord, KnowledgeRecordList, KnowledgeSearchOutcome, ListCanvasDashboardsRequest, ListDataRequest,
ListKnowledgeRequest, SearchKnowledgeRequest, UpdateCanvasDashboardRequest, UpdateKnowledgeRequest,
UpsertDataRequest, VaultKnowledgeTree,
};
pub struct KnowledgeRequest {
pub payload: KnowledgeRequestPayload,
pub reply_to: oneshot::Sender<Result<KnowledgeResponse, KnowledgeError>>,
}
#[aves::bus_requests(marker = KnowledgeDomain, context = BusRpcContext, root_error = KnowledgeError, domain_error = KnowledgeError)]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum KnowledgeRequestPayload {
#[operation(name = "createKnowledge", kind = "mutation", response = KnowledgeCreatedOutput, response_variant = "KnowledgeCreated")]
CreateKnowledge { request: CreateKnowledgeRequest },
#[operation(name = "listKnowledgeTree", kind = "query", response = KnowledgeTreeListedOutput, response_variant = "KnowledgeTreeListed")]
ListKnowledgeTree,
#[operation(name = "listKnowledge", kind = "query", response = KnowledgeListedOutput, response_variant = "KnowledgeListed")]
ListKnowledge { request: ListKnowledgeRequest },
#[operation(name = "getKnowledge", kind = "query", response = KnowledgeFoundOutput, response_variant = "KnowledgeFound")]
GetKnowledge { request: GetKnowledgeRequest },
#[operation(name = "updateKnowledge", kind = "mutation", response = KnowledgeUpdatedOutput, response_variant = "KnowledgeUpdated")]
UpdateKnowledge { request: UpdateKnowledgeRequest },
#[operation(name = "deleteKnowledge", kind = "mutation", response = KnowledgeDeletedOutput, response_variant = "KnowledgeDeleted")]
DeleteKnowledge { request: DeleteKnowledgeRequest },
#[operation(name = "searchKnowledge", kind = "query", response = KnowledgeSearchedOutput, response_variant = "KnowledgeSearched")]
SearchKnowledge { request: SearchKnowledgeRequest },
#[operation(name = "upsertData", kind = "mutation", response = DataUpsertedOutput, response_variant = "DataUpserted")]
UpsertData { request: UpsertDataRequest },
#[operation(name = "listData", kind = "query", response = DataListedOutput, response_variant = "DataListed")]
ListData { request: ListDataRequest },
#[operation(name = "getData", kind = "query", response = DataFoundOutput, response_variant = "DataFound")]
GetData { key: String },
#[operation(name = "deleteData", kind = "mutation", response = DataDeletedOutput, response_variant = "DataDeleted")]
DeleteData { key: String },
#[operation(name = "createCanvasDashboard", kind = "mutation", response = CanvasDashboardCreatedOutput, response_variant = "CanvasDashboardCreated")]
CreateCanvasDashboard { request: CreateCanvasDashboardRequest },
#[operation(name = "getCanvasDashboard", kind = "query", response = CanvasDashboardFoundOutput, response_variant = "CanvasDashboardFound")]
GetCanvasDashboard { request: GetCanvasDashboardRequest },
#[operation(name = "updateCanvasDashboard", kind = "mutation", response = CanvasDashboardUpdatedOutput, response_variant = "CanvasDashboardUpdated")]
UpdateCanvasDashboard { request: UpdateCanvasDashboardRequest },
#[operation(name = "deleteCanvasDashboard", kind = "mutation", response = CanvasDashboardDeletedOutput, response_variant = "CanvasDashboardDeleted")]
DeleteCanvasDashboard { request: DeleteCanvasDashboardRequest },
#[operation(name = "listCanvasDashboards", kind = "query", response = CanvasDashboardListedOutput, response_variant = "CanvasDashboardListed")]
ListCanvasDashboards { request: ListCanvasDashboardsRequest },
#[serde(skip)]
KnowledgeConfigChanged,
#[serde(skip)]
StopRuntime,
}
#[aves::bus_responses]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum KnowledgeResponse {
#[serde(skip)]
KnowledgeRecordsChanged,
#[serde(skip)]
RuntimeStopped,
KnowledgeCreated { knowledge: KnowledgeRecord },
KnowledgeFound { knowledge: KnowledgeRecord },
KnowledgeUpdated { knowledge: KnowledgeRecord },
KnowledgeDeleted { result: DeleteKnowledgeResult },
KnowledgeListed(KnowledgeRecordList),
KnowledgeTreeListed { entries: VaultKnowledgeTree },
KnowledgeSearched(KnowledgeSearchOutcome),
DataUpserted { data: DataObject },
DataFound { data: DataObject },
DataListed { data: DataList },
DataDeleted { key: String },
CanvasDashboardCreated { dashboard: CanvasDashboard },
CanvasDashboardFound { dashboard: CanvasDashboardLookup },
CanvasDashboardUpdated { dashboard: CanvasDashboard },
CanvasDashboardDeleted {
id: SpectaUuid,
result: CanvasDashboardDeleteResult,
},
CanvasDashboardListed { dashboards: CanvasDashboardSummaryList },
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum KnowledgeBroadcast {
RecordsChanged,
CanvasDashboardCreated { dashboard_id: SpectaUuid },
CanvasDashboardUpdated { dashboard_id: SpectaUuid },
CanvasDashboardDeleted { dashboard_id: SpectaUuid },
}