atuin_common/
api.rs

1use lazy_static::lazy_static;
2use semver::Version;
3use serde::{Deserialize, Serialize};
4use std::borrow::Cow;
5use time::OffsetDateTime;
6
7// the usage of X- has been deprecated for quite along time, it turns out
8pub static ATUIN_HEADER_VERSION: &str = "Atuin-Version";
9pub static ATUIN_CARGO_VERSION: &str = env!("CARGO_PKG_VERSION");
10
11lazy_static! {
12    pub static ref ATUIN_VERSION: Version =
13        Version::parse(ATUIN_CARGO_VERSION).expect("failed to parse self semver");
14}
15
16#[derive(Debug, Serialize, Deserialize)]
17pub struct UserResponse {
18    pub username: String,
19}
20
21#[derive(Debug, Serialize, Deserialize)]
22pub struct RegisterRequest {
23    pub email: String,
24    pub username: String,
25    pub password: String,
26}
27
28#[derive(Debug, Serialize, Deserialize)]
29pub struct RegisterResponse {
30    pub session: String,
31}
32
33#[derive(Debug, Serialize, Deserialize)]
34pub struct DeleteUserResponse {}
35
36#[derive(Debug, Serialize, Deserialize)]
37pub struct SendVerificationResponse {
38    pub email_sent: bool,
39    pub verified: bool,
40}
41
42#[derive(Debug, Serialize, Deserialize)]
43pub struct VerificationTokenRequest {
44    pub token: String,
45}
46
47#[derive(Debug, Serialize, Deserialize)]
48pub struct VerificationTokenResponse {
49    pub verified: bool,
50}
51
52#[derive(Debug, Serialize, Deserialize)]
53pub struct ChangePasswordRequest {
54    pub current_password: String,
55    pub new_password: String,
56}
57
58#[derive(Debug, Serialize, Deserialize)]
59pub struct ChangePasswordResponse {}
60
61#[derive(Debug, Serialize, Deserialize)]
62pub struct LoginRequest {
63    pub username: String,
64    pub password: String,
65}
66
67#[derive(Debug, Serialize, Deserialize)]
68pub struct LoginResponse {
69    pub session: String,
70}
71
72#[derive(Debug, Serialize, Deserialize)]
73pub struct AddHistoryRequest {
74    pub id: String,
75    #[serde(with = "time::serde::rfc3339")]
76    pub timestamp: OffsetDateTime,
77    pub data: String,
78    pub hostname: String,
79}
80
81#[derive(Debug, Serialize, Deserialize)]
82pub struct CountResponse {
83    pub count: i64,
84}
85
86#[derive(Debug, Serialize, Deserialize)]
87pub struct SyncHistoryRequest {
88    #[serde(with = "time::serde::rfc3339")]
89    pub sync_ts: OffsetDateTime,
90    #[serde(with = "time::serde::rfc3339")]
91    pub history_ts: OffsetDateTime,
92    pub host: String,
93}
94
95#[derive(Debug, Serialize, Deserialize)]
96pub struct SyncHistoryResponse {
97    pub history: Vec<String>,
98}
99
100#[derive(Debug, Serialize, Deserialize)]
101pub struct ErrorResponse<'a> {
102    pub reason: Cow<'a, str>,
103}
104
105#[derive(Debug, Serialize, Deserialize)]
106pub struct IndexResponse {
107    pub homage: String,
108    pub version: String,
109    pub total_history: i64,
110}
111
112#[derive(Debug, Serialize, Deserialize)]
113pub struct StatusResponse {
114    pub count: i64,
115    pub username: String,
116    pub deleted: Vec<String>,
117
118    // These could/should also go on the index of the server
119    // However, we do not request the server index as a part of normal sync
120    // I'd rather slightly increase the size of this response, than add an extra HTTP request
121    pub page_size: i64, // max page size supported by the server
122    pub version: String,
123}
124
125#[derive(Debug, Serialize, Deserialize)]
126pub struct DeleteHistoryRequest {
127    pub client_id: String,
128}
129
130#[derive(Debug, Serialize, Deserialize)]
131pub struct MessageResponse {
132    pub message: String,
133}
134
135#[derive(Debug, Serialize, Deserialize)]
136pub struct MeResponse {
137    pub username: String,
138}