eio_okta_api/v1/users/
get_user.rs1use 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}