use crate::{CapabilityType, OperationCapability};
use fission_store::{
SqlError, SqlExecuteResult, SqlMigrationResult, SqlMigrations, SqlQuery, SqlRows, SqlStatement,
SqlTransaction, SqlTransactionResult, StoreBatch, StoreBatchResult, StoreContains, StoreEntry,
StoreError, StoreGet, StoreListPrefix, StoreRemove, StoreSet, StoreValue,
};
pub struct StoreGetCapability;
impl OperationCapability for StoreGetCapability {
type Request = StoreGet;
type Ok = Option<StoreValue>;
type Err = StoreError;
}
pub struct StoreSetCapability;
impl OperationCapability for StoreSetCapability {
type Request = StoreSet;
type Ok = ();
type Err = StoreError;
}
pub struct StoreContainsCapability;
impl OperationCapability for StoreContainsCapability {
type Request = StoreContains;
type Ok = bool;
type Err = StoreError;
}
pub struct StoreRemoveCapability;
impl OperationCapability for StoreRemoveCapability {
type Request = StoreRemove;
type Ok = bool;
type Err = StoreError;
}
pub struct StoreBatchCapability;
impl OperationCapability for StoreBatchCapability {
type Request = StoreBatch;
type Ok = StoreBatchResult;
type Err = StoreError;
}
pub struct StoreListPrefixCapability;
impl OperationCapability for StoreListPrefixCapability {
type Request = StoreListPrefix;
type Ok = Vec<StoreEntry>;
type Err = StoreError;
}
pub const STORE_GET: CapabilityType<StoreGetCapability> = CapabilityType::new("fission.store.get");
pub const STORE_SET: CapabilityType<StoreSetCapability> = CapabilityType::new("fission.store.set");
pub const STORE_CONTAINS: CapabilityType<StoreContainsCapability> =
CapabilityType::new("fission.store.contains");
pub const STORE_REMOVE: CapabilityType<StoreRemoveCapability> =
CapabilityType::new("fission.store.remove");
pub const STORE_BATCH: CapabilityType<StoreBatchCapability> =
CapabilityType::new("fission.store.batch");
pub const STORE_LIST_PREFIX: CapabilityType<StoreListPrefixCapability> =
CapabilityType::new("fission.store.list_prefix");
#[cfg(feature = "store-sql")]
pub struct SqlExecuteCapability;
#[cfg(feature = "store-sql")]
impl OperationCapability for SqlExecuteCapability {
type Request = SqlStatement;
type Ok = SqlExecuteResult;
type Err = SqlError;
}
#[cfg(feature = "store-sql")]
pub struct SqlQueryCapability;
#[cfg(feature = "store-sql")]
impl OperationCapability for SqlQueryCapability {
type Request = SqlQuery;
type Ok = SqlRows;
type Err = SqlError;
}
#[cfg(feature = "store-sql")]
pub struct SqlTransactionCapability;
#[cfg(feature = "store-sql")]
impl OperationCapability for SqlTransactionCapability {
type Request = SqlTransaction;
type Ok = SqlTransactionResult;
type Err = SqlError;
}
#[cfg(feature = "store-sql")]
pub struct SqlMigrateCapability;
#[cfg(feature = "store-sql")]
impl OperationCapability for SqlMigrateCapability {
type Request = SqlMigrations;
type Ok = SqlMigrationResult;
type Err = SqlError;
}
#[cfg(feature = "store-sql")]
pub const SQL_EXECUTE: CapabilityType<SqlExecuteCapability> =
CapabilityType::new("fission.store.sql.execute");
#[cfg(feature = "store-sql")]
pub const SQL_QUERY: CapabilityType<SqlQueryCapability> =
CapabilityType::new("fission.store.sql.query");
#[cfg(feature = "store-sql")]
pub const SQL_TRANSACTION: CapabilityType<SqlTransactionCapability> =
CapabilityType::new("fission.store.sql.transaction");
#[cfg(feature = "store-sql")]
pub const SQL_MIGRATE: CapabilityType<SqlMigrateCapability> =
CapabilityType::new("fission.store.sql.migrate");