use crate::jsonrpc::OdooWebMethod;
use crate::service::common::ServerVersionInfo;
use crate::{self as odoo_api, OdooId};
use odoo_api_macros::odoo_web;
use serde::ser::SerializeTuple;
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};
#[odoo_web(
path = "/web/session/authenticate",
name = "web_session_authenticate",
auth = false
)]
#[derive(Debug, Serialize)]
pub struct SessionAuthenticate {
pub(crate) db: String,
pub(crate) login: String,
pub(crate) password: String,
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(transparent)]
pub struct SessionAuthenticateResponse {
pub data: Value,
}
#[odoo_web(path = "/web/database/list", name = "web_database_list", auth = false)]
#[derive(Debug)]
pub struct DatabaseList {}
impl Serialize for DatabaseList {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let state = serializer.serialize_tuple(0)?;
state.end()
}
}
#[derive(Debug, Serialize, Deserialize)]
#[serde(transparent)]
pub struct DatabaseListResponse {
pub databases: Vec<String>,
}
#[odoo_web(
path = "/web/session/get_session_info",
name = "web_get_session_info",
auth = false
)]
#[derive(Debug)]
pub struct GetSessionInfo {}
impl Serialize for GetSessionInfo {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let state = serializer.serialize_tuple(0)?;
state.end()
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GetSessionInfoResponse {
uid: OdooId,
is_system: bool,
is_admin: bool,
user_context: Map<String, Value>,
db: String,
server_version: String,
server_version_info: ServerVersionInfo,
name: String,
username: String,
partner_display_name: String,
company_id: OdooId,
partner_id: OdooId,
#[serde(rename = "web.base.url")]
web_base_url: String,
active_ids_limit: String,
max_file_upload_size: String,
user_companies: Option<MultiCompanyInfo>,
show_effect: Option<bool>,
display_switch_company_menu: Option<bool>,
cache_hashes: Option<Value>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MultiCompanyInfo {
current_company: MultiCompanyInfoCurrent,
allowed_companies: Vec<MultiCompanyInfoAllowed>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum MultiCompanyInfoCurrent {
NameAndId((OdooId, String)),
Id(OdooId),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct MultiCompanyInfoAllowed {
id: OdooId,
name: String,
sequence: Option<u32>,
}