cloud_sdk_testkit/
response.rs1use cloud_sdk::transport::StatusCode;
4
5use crate::{ActionFixture, FixtureBody, PaginationFixture, RateLimitFixture};
6
7#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
9pub enum FixtureKind {
10 Success,
12 Pagination,
14 Action,
16 RateLimit,
18 Error,
20}
21
22#[derive(Clone, Copy, Debug, Eq, PartialEq)]
24pub enum ResponseFixtureError {
25 NonErrorStatus,
27}
28
29#[derive(Clone, Copy, Debug, Eq, PartialEq)]
31pub struct ResponseFixture<'a> {
32 kind: FixtureKind,
33 status: StatusCode,
34 body: FixtureBody<'a>,
35 pagination: Option<PaginationFixture>,
36 action: Option<ActionFixture>,
37 rate_limit: Option<RateLimitFixture>,
38}
39
40impl<'a> ResponseFixture<'a> {
41 #[must_use]
43 pub const fn success(body: FixtureBody<'a>) -> Self {
44 Self::new(FixtureKind::Success, StatusCode::OK, body)
45 }
46
47 #[must_use]
49 pub const fn paginated(body: FixtureBody<'a>, pagination: PaginationFixture) -> Self {
50 let mut fixture = Self::new(FixtureKind::Pagination, StatusCode::OK, body);
51 fixture.pagination = Some(pagination);
52 fixture
53 }
54
55 #[must_use]
57 pub const fn action(body: FixtureBody<'a>, action: ActionFixture) -> Self {
58 let mut fixture = Self::new(FixtureKind::Action, StatusCode::OK, body);
59 fixture.action = Some(action);
60 fixture
61 }
62
63 #[must_use]
65 pub const fn rate_limited(body: FixtureBody<'a>, rate_limit: RateLimitFixture) -> Self {
66 let mut fixture = Self::new(FixtureKind::RateLimit, StatusCode::TOO_MANY_REQUESTS, body);
67 fixture.rate_limit = Some(rate_limit);
68 fixture
69 }
70
71 pub const fn error(
73 status: StatusCode,
74 body: FixtureBody<'a>,
75 ) -> Result<Self, ResponseFixtureError> {
76 if !status.is_error() {
77 return Err(ResponseFixtureError::NonErrorStatus);
78 }
79 Ok(Self::new(FixtureKind::Error, status, body))
80 }
81
82 const fn new(kind: FixtureKind, status: StatusCode, body: FixtureBody<'a>) -> Self {
83 Self {
84 kind,
85 status,
86 body,
87 pagination: None,
88 action: None,
89 rate_limit: None,
90 }
91 }
92
93 #[must_use]
95 pub const fn kind(self) -> FixtureKind {
96 self.kind
97 }
98
99 #[must_use]
101 pub const fn status(self) -> StatusCode {
102 self.status
103 }
104
105 #[must_use]
107 pub const fn body(self) -> FixtureBody<'a> {
108 self.body
109 }
110
111 #[must_use]
113 pub const fn pagination(self) -> Option<PaginationFixture> {
114 self.pagination
115 }
116
117 #[must_use]
119 pub const fn action_metadata(self) -> Option<ActionFixture> {
120 self.action
121 }
122
123 #[must_use]
125 pub const fn rate_limit(self) -> Option<RateLimitFixture> {
126 self.rate_limit
127 }
128}