Skip to main content

librus_rs/structs/
users.rs

1//! User data types.
2
3use serde::Deserialize;
4
5/// A user in the Librus system (student, teacher, or parent).
6#[derive(Debug, Deserialize)]
7#[serde(rename_all = "PascalCase")]
8pub struct User {
9    /// Unique user identifier.
10    pub id: i64,
11    /// Account ID as a string.
12    pub account_id: String,
13    /// First name.
14    pub first_name: String,
15    /// Last name.
16    pub last_name: String,
17    /// Class the user belongs to (for students).
18    pub class: Option<UserClass>,
19    /// School unit the user belongs to.
20    pub unit: Option<UserUnit>,
21    /// Class register number (for students).
22    pub class_register_number: Option<i64>,
23    /// Whether this user is a school employee.
24    pub is_employee: bool,
25    /// User group ID.
26    pub group_id: i64,
27}
28
29/// Reference to a user's class.
30#[derive(Debug, Deserialize)]
31#[serde(rename_all = "PascalCase")]
32pub struct UserClass {
33    /// Class ID.
34    pub id: i64,
35    /// API URL for the class.
36    pub url: String,
37    /// Class UUID.
38    #[serde(rename = "UUID")]
39    pub uuid: String,
40}
41
42/// Reference to a school unit.
43#[derive(Debug, Deserialize)]
44#[serde(rename_all = "PascalCase")]
45pub struct UserUnit {
46    /// Unit ID.
47    pub id: i64,
48    /// API URL for the unit.
49    pub url: String,
50}
51
52#[derive(Debug, Deserialize)]
53#[serde(rename_all = "PascalCase")]
54pub struct UserUrl {
55    pub url: String,
56}
57
58#[derive(Debug, Deserialize)]
59pub struct UserResources {
60    #[serde(rename = "Users\\IndividualEducationPeriods")]
61    pub users_individual_education_periods: UserUrl,
62    #[serde(rename = "Users\\CrossedOutStudents")]
63    pub users_crossed_out_students: UserUrl,
64    #[serde(rename = "..")]
65    pub root: UserUrl,
66}
67
68/// Response containing a single user.
69#[derive(Debug, Deserialize)]
70#[serde(rename_all = "PascalCase")]
71pub struct ResponseUser {
72    /// The user data, if found.
73    pub user: Option<User>,
74    /// Related API resources.
75    pub resources: UserResources,
76    /// API URL for this response.
77    pub url: String,
78}