Skip to main content

cloud_sdk_testkit/
prepared.rs

1//! Redacted records of prepared request policy and shape.
2
3use core::fmt;
4
5use cloud_sdk::Method;
6use cloud_sdk::operation::{OperationMetadata, PreparedRequest, ProviderService, ResponsePolicy};
7
8/// Non-secret record of one prepared request for policy assertions.
9#[derive(Clone, Copy, Eq, PartialEq)]
10pub struct PreparedRequestRecord {
11    method: Method,
12    target_len: usize,
13    body_len: usize,
14    has_request_content_type: bool,
15    service: ProviderService,
16    metadata: OperationMetadata,
17    response_policy: ResponsePolicy,
18}
19
20impl PreparedRequestRecord {
21    /// Captures request shape and complete policy without copying target or body bytes.
22    #[must_use]
23    pub const fn capture(prepared: PreparedRequest<'_>) -> Self {
24        let request = prepared.transport_request();
25        Self {
26            method: request.method(),
27            target_len: request.target().as_str().len(),
28            body_len: request.body().len(),
29            has_request_content_type: request.content_type().is_some(),
30            service: prepared.service(),
31            metadata: prepared.metadata(),
32            response_policy: prepared.response_policy(),
33        }
34    }
35
36    /// Returns the HTTP method.
37    #[must_use]
38    pub const fn method(self) -> Method {
39        self.method
40    }
41
42    /// Returns the redacted request-target length.
43    #[must_use]
44    pub const fn target_len(self) -> usize {
45        self.target_len
46    }
47
48    /// Returns the redacted request-body length.
49    #[must_use]
50    pub const fn body_len(self) -> usize {
51        self.body_len
52    }
53
54    /// Reports whether a request content type is configured.
55    #[must_use]
56    pub const fn has_request_content_type(self) -> bool {
57        self.has_request_content_type
58    }
59
60    /// Returns the bound provider service and endpoint.
61    #[must_use]
62    pub const fn service(self) -> ProviderService {
63        self.service
64    }
65
66    /// Returns complete operation safety and retry metadata.
67    #[must_use]
68    pub const fn metadata(self) -> OperationMetadata {
69        self.metadata
70    }
71
72    /// Returns complete checked-response policy.
73    #[must_use]
74    pub const fn response_policy(self) -> ResponsePolicy {
75        self.response_policy
76    }
77}
78
79impl fmt::Debug for PreparedRequestRecord {
80    fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
81        formatter
82            .debug_struct("PreparedRequestRecord")
83            .field("method", &self.method)
84            .field("target_len", &self.target_len)
85            .field("target", &"[redacted]")
86            .field("body_len", &self.body_len)
87            .field("body", &"[redacted]")
88            .field("has_request_content_type", &self.has_request_content_type)
89            .field("service", &self.service)
90            .field("metadata", &self.metadata)
91            .field("response_policy", &self.response_policy)
92            .finish()
93    }
94}