feat: complete Epic 1 production foundation

This commit is contained in:
2026-08-25 01:24:11 +03:00
parent 767428436d
commit 182bde8ac0
298 changed files with 35719 additions and 5299 deletions
+40 -2
View File
@@ -4,7 +4,7 @@ mod model;
use async_trait::async_trait;
use crank_core::{
AdapterResponse, ExecutionMode, PreparedRequest, Protocol, ProtocolAdapter,
AdapterResponse, DispatchEvidence, ExecutionMode, PreparedRequest, Protocol, ProtocolAdapter,
ProtocolAdapterError, RestTarget, RuntimeRequestContext, Target,
};
@@ -33,6 +33,7 @@ impl ProtocolAdapter for RestAdapter {
path_params: prepared.path_params.clone(),
query_params: prepared.query_params.clone(),
headers: prepared.headers.clone(),
trusted_header_names: prepared.trusted_header_names.clone(),
body: prepared.body.clone(),
timeout_ms: prepared.timeout_ms,
};
@@ -55,6 +56,43 @@ fn rest_target(target: &Target) -> Result<&RestTarget, ProtocolAdapterError> {
impl From<RestAdapterError> for ProtocolAdapterError {
fn from(value: RestAdapterError) -> Self {
ProtocolAdapterError::Message(value.to_string())
match value {
RestAdapterError::InvalidBaseUrl { .. }
| RestAdapterError::InvalidConfiguration { .. } => Self::InvalidConfiguration,
RestAdapterError::InvalidPathParameter { .. }
| RestAdapterError::InvalidQueryParameter { .. }
| RestAdapterError::InvalidHeaderName { .. }
| RestAdapterError::InvalidHeaderValue { .. } => Self::InvalidPreparedRequest,
RestAdapterError::RedirectNotAllowed => Self::TargetRejected,
RestAdapterError::TargetNotAllowed { .. } => Self::TargetRejected,
RestAdapterError::RequestTooLarge { .. } => Self::RequestTooLarge,
RestAdapterError::ResponseTooLarge { .. } => Self::ResponseTooLarge {
dispatch: DispatchEvidence::MayHaveDispatched,
},
RestAdapterError::Transport { timeout, connect } if timeout => Self::Timeout {
dispatch: if connect {
DispatchEvidence::NotDispatched
} else {
DispatchEvidence::MayHaveDispatched
},
},
RestAdapterError::Transport { connect, .. } => Self::Transport {
dispatch: if connect {
DispatchEvidence::NotDispatched
} else {
DispatchEvidence::MayHaveDispatched
},
},
RestAdapterError::WindowExpired => Self::Timeout {
dispatch: DispatchEvidence::MayHaveDispatched,
},
RestAdapterError::UnexpectedStatus { status, .. } => Self::UnexpectedStatus {
status,
dispatch: DispatchEvidence::MayHaveDispatched,
},
RestAdapterError::InvalidSseEvent => Self::InvalidResponse {
dispatch: DispatchEvidence::MayHaveDispatched,
},
}
}
}