chore: bootstrap nana-story M0

This commit is contained in:
Codex
2026-07-28 12:51:00 +08:00
commit 3dacc92423
71 changed files with 6840 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
use std::collections::VecDeque;
use nana_domain::{TurnFailure, TurnFailureCode, TurnRequest, TurnResult};
use thiserror::Error;
pub const LAPP_BASELINE_COMMIT: &str = "5ba3c659e1536ec4bee16340faca603940a5cb17";
#[derive(Debug, Error)]
pub enum ProviderError {
#[error("no recorded response remains")]
FixtureExhausted,
#[error("LAPP profile could not be loaded: {0}")]
Profile(String),
}
pub trait TurnProvider {
fn complete_turn(&mut self, request: &TurnRequest) -> Result<TurnResult, ProviderError>;
}
#[derive(Debug)]
pub struct FakeProvider {
responses: VecDeque<TurnResult>,
}
impl FakeProvider {
#[must_use]
pub fn new(responses: impl IntoIterator<Item = TurnResult>) -> Self {
Self {
responses: responses.into_iter().collect(),
}
}
}
impl TurnProvider for FakeProvider {
fn complete_turn(&mut self, _request: &TurnRequest) -> Result<TurnResult, ProviderError> {
self.responses
.pop_front()
.ok_or(ProviderError::FixtureExhausted)
}
}
pub fn load_default_lapp_profile() -> Result<openlapp::Profile, ProviderError> {
openlapp::load_default_profile().map_err(|error| ProviderError::Profile(error.to_string()))
}
#[must_use]
pub fn provider_failure(message: impl Into<String>) -> TurnFailure {
TurnFailure {
code: TurnFailureCode::ProviderUnavailable,
message: message.into(),
retryable: true,
}
}