eio_okta_api/v1/users/
get_user.rs

1use clap::Args;
2use eio_okta_data::v2024_07_0::management::components::{
3  parameters::{PathUserId, QueryUserExpand},
4  schemas::User,
5};
6use iri_string::template::{simple_context::SimpleContext, Context};
7use serde::{Deserialize, Serialize};
8use validator::Validate;
9
10use crate::{
11  traits::{IntoRequest, Response},
12  Endpoint, MapInto, QueryString,
13};
14
15impl Endpoint for GetUser {
16  const PATH: &'static str = "/api/v1/users/{userId}";
17
18  fn query(&self) -> Result<QueryString, crate::traits::endpoint::Error> {
19    QueryString::simple(&self.query).map_into()
20  }
21
22  fn context(&self) -> impl Context {
23    let mut context = SimpleContext::new();
24    context.insert("userId", self.path.user_id.as_str());
25    context
26  }
27}
28
29impl IntoRequest for GetUser {
30  type Body = ();
31}
32
33impl Response for GetUser {
34  type Body = User;
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize, Args, Validate)]
38#[remain::sorted]
39pub struct GetUser {
40  #[command(flatten)]
41  #[serde(flatten)]
42  pub path: PathUserId,
43  #[command(flatten)]
44  #[serde(flatten)]
45  pub query: QueryUserExpand,
46}
47
48impl AsRef<()> for GetUser {
49  fn as_ref(&self) -> &() {
50    &()
51  }
52}
53
54impl Context for GetUser {
55  fn visit<V: iri_string::template::context::Visitor>(&self, visitor: V) -> V::Result {
56    match visitor.var_name().as_str() {
57      "userId" => visitor.visit_string(&self.path.user_id),
58      _ => visitor.visit_undefined(),
59    }
60  }
61}