use std::ptr;
use codlet_core::LookupKey;
use codlet_core::secret::CodeId;
use codlet_core::state::ClaimOutcome;
use codlet_core::store::code::{ClaimRequest, CodeRecord, CodeStore, RedeemableCode};
use codlet_core::store::error::StoreError;
struct NotSendStore(#[allow(dead_code)] *const u8);
impl CodeStore for NotSendStore {
async fn find_redeemable(
&self,
_candidates: &[LookupKey],
_now: u64,
_scope: Option<&str>,
) -> Result<Option<RedeemableCode>, StoreError> {
Ok(None)
}
async fn claim_code(&self, _req: &ClaimRequest<'_>) -> Result<ClaimOutcome, StoreError> {
Ok(ClaimOutcome::Lost)
}
async fn insert_code(&self, _record: CodeRecord) -> Result<(), StoreError> {
Ok(())
}
async fn revoke_code(
&self,
_code_id: &CodeId,
_scope: Option<&str>,
_now: u64,
) -> Result<(), StoreError> {
Ok(())
}
}
fn accepts_not_send_store<S: CodeStore>(_store: &S) {}
#[test]
fn not_send_store_satisfies_code_store_trait() {
let store = NotSendStore(ptr::null());
accepts_not_send_store(&store);
}
#[derive(Default)]
struct SendStore;
static_assertions::assert_impl_all!(SendStore: Send, Sync);
impl CodeStore for SendStore {
async fn find_redeemable(
&self,
_candidates: &[LookupKey],
_now: u64,
_scope: Option<&str>,
) -> Result<Option<RedeemableCode>, StoreError> {
Ok(None)
}
async fn claim_code(&self, _req: &ClaimRequest<'_>) -> Result<ClaimOutcome, StoreError> {
Ok(ClaimOutcome::Lost)
}
async fn insert_code(&self, _record: CodeRecord) -> Result<(), StoreError> {
Ok(())
}
async fn revoke_code(
&self,
_code_id: &CodeId,
_scope: Option<&str>,
_now: u64,
) -> Result<(), StoreError> {
Ok(())
}
}
fn accepts_axum_style_store<S: CodeStore + Send + Sync + 'static>(_store: S) {}
#[test]
fn send_sync_store_satisfies_axum_style_bounds() {
accepts_axum_style_store(SendStore);
}