smart_id_rust_client/models/api/
session_status.rs1use crate::error::Result;
2use crate::error::SmartIdClientError;
3use crate::models::api::response::SmartIdAPIResponse;
4use crate::models::common::CertificateLevel;
5use crate::models::interaction::InteractionFlow;
6use crate::models::signature::{ResponseSignature, SignatureProtocol};
7use serde::{Deserialize, Serialize};
8use serde_with::skip_serializing_none;
9
10pub(crate) type SessionResponse = SmartIdAPIResponse<SessionStatusResponse>;
11
12#[skip_serializing_none]
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default)]
29#[serde(rename_all = "camelCase")]
30pub struct SessionStatusResponse {
31 pub state: SessionState,
32 pub result: Option<SessionResult>,
33 pub signature_protocol: Option<SignatureProtocol>,
34 pub signature: Option<ResponseSignature>,
35 pub cert: Option<SessionCertificate>,
36 pub ignored_properties: Option<Vec<String>>,
37 pub interaction_type_used: Option<InteractionFlow>,
38 pub device_ip_address: Option<String>,
39}
40
41#[skip_serializing_none]
51#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
52#[serde(rename_all = "camelCase")]
53pub struct SessionCertificate {
54 pub value: String,
56 pub certificate_level: CertificateLevel,
57}
58
59#[skip_serializing_none]
69#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
70#[serde(rename_all = "camelCase")]
71pub struct SessionResult {
72 pub end_result: EndResult,
73 pub document_number: Option<String>,
74}
75
76#[allow(non_camel_case_types)]
77#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
78#[non_exhaustive]
79pub enum SessionState {
80 #[default]
81 RUNNING,
82 COMPLETE,
83}
84
85#[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)]
86#[allow(non_camel_case_types)]
87#[non_exhaustive]
88pub enum EndResult {
89 OK,
91 USER_REFUSED,
93 USER_REFUSED_INTERACTION,
95 TIMEOUT,
97 DOCUMENT_UNUSABLE,
99 WRONG_VC,
101 REQUIRED_INTERACTION_NOT_SUPPORTED_BY_APP,
103 USER_REFUSED_CERT_CHOICE,
105 USER_REFUSED_DISPLAYTEXTANDPIN,
107 USER_REFUSED_VC_CHOICE,
109 USER_REFUSED_CONFIRMATIONMESSAGE,
111 USER_REFUSED_CONFIRMATIONMESSAGE_WITH_VC_CHOICE,
113 PROTOCOL_FAILURE,
115 SERVER_ERROR,
117 #[default]
118 UNKNOWN,
119}
120
121impl EndResult {
122 pub fn is_ok(&self) -> Result<()> {
123 match self {
124 EndResult::OK => Ok(()),
125 EndResult::USER_REFUSED => {
126 Err(SmartIdClientError::UserRefusedVerificationChoiceException)
127 }
128 EndResult::TIMEOUT => Err(SmartIdClientError::SessionTimeoutException),
129 EndResult::DOCUMENT_UNUSABLE => Err(SmartIdClientError::DocumentUnusableException),
130 EndResult::WRONG_VC => {
131 Err(SmartIdClientError::UserSelectedWrongVerificationCodeException)
132 }
133 EndResult::REQUIRED_INTERACTION_NOT_SUPPORTED_BY_APP => {
134 Err(SmartIdClientError::RequiredInteractionNotSupportedByAppException)
135 }
136 EndResult::USER_REFUSED_CERT_CHOICE => {
137 Err(SmartIdClientError::UserRefusedCertChoiceException)
138 }
139 EndResult::USER_REFUSED_DISPLAYTEXTANDPIN => {
140 Err(SmartIdClientError::UserRefusedDisplayTextAndPinException)
141 }
142 EndResult::USER_REFUSED_VC_CHOICE => {
143 Err(SmartIdClientError::UserRefusedVerificationChoiceException)
144 }
145 EndResult::USER_REFUSED_CONFIRMATIONMESSAGE => {
146 Err(SmartIdClientError::UserRefusedConfirmationMessageException)
147 }
148 EndResult::USER_REFUSED_CONFIRMATIONMESSAGE_WITH_VC_CHOICE => Err(
149 SmartIdClientError::UserRefusedConfirmationMessageWithVerificationChoiceException,
150 ),
151 EndResult::PROTOCOL_FAILURE => Err(SmartIdClientError::ProtocolFailureException),
152 EndResult::SERVER_ERROR => Err(SmartIdClientError::ServerErrorException),
153 EndResult::UNKNOWN | _ => Err(SmartIdClientError::SmartIdClientException(
154 "Unknown session end result",
155 )),
156 }
157 }
158}
159
160impl From<EndResult> for SmartIdClientError {
161 fn from(val: EndResult) -> Self {
162 match val {
163 EndResult::USER_REFUSED => SmartIdClientError::UserRefusedVerificationChoiceException,
164 EndResult::TIMEOUT => SmartIdClientError::SessionTimeoutException,
165 EndResult::DOCUMENT_UNUSABLE => SmartIdClientError::DocumentUnusableException,
166 EndResult::WRONG_VC => SmartIdClientError::UserSelectedWrongVerificationCodeException,
167 EndResult::REQUIRED_INTERACTION_NOT_SUPPORTED_BY_APP => {
168 SmartIdClientError::RequiredInteractionNotSupportedByAppException
169 }
170 EndResult::USER_REFUSED_CERT_CHOICE => {
171 SmartIdClientError::UserRefusedCertChoiceException
172 }
173 EndResult::USER_REFUSED_DISPLAYTEXTANDPIN => {
174 SmartIdClientError::UserRefusedDisplayTextAndPinException
175 }
176 EndResult::USER_REFUSED_VC_CHOICE => {
177 SmartIdClientError::UserRefusedVerificationChoiceException
178 }
179 EndResult::USER_REFUSED_CONFIRMATIONMESSAGE => {
180 SmartIdClientError::UserRefusedConfirmationMessageException
181 }
182 EndResult::USER_REFUSED_CONFIRMATIONMESSAGE_WITH_VC_CHOICE => {
183 SmartIdClientError::UserRefusedConfirmationMessageWithVerificationChoiceException
184 }
185 _ => SmartIdClientError::SmartIdClientException("Unknown session end result"),
186 }
187 }
188}