mocra_core/common/model/
login_info.rs1use crate::cacheable::CacheAble;
2use crate::common::model::cookies::CookieItem;
3use crate::common::model::headers::HeaderItem;
4use crate::common::model::{Cookies, Headers};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct LoginInfo {
9 pub cookies: Vec<CookieItem>,
10 pub useragent: String,
11 pub extra: serde_json::Value,
12}
13
14impl Default for LoginInfo {
15 fn default() -> Self {
16 LoginInfo{
17 cookies: vec![],
18 useragent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36".to_string(),
19 extra: Default::default(),
20 }
21 }
22}
23
24impl From<&LoginInfo> for Cookies {
25 fn from(value: &LoginInfo) -> Self {
26 Cookies {
27 cookies: value.cookies.clone(),
28 }
29 }
30}
31
32impl From<&LoginInfo> for Headers {
33 fn from(value: &LoginInfo) -> Self {
34 Headers {
35 headers: vec![HeaderItem {
36 key: "User-Agent".to_string(),
37 value: value.useragent.clone(),
38 }],
39 }
40 }
41}
42impl LoginInfo {
43 pub fn get_extra<T>(&self, key: &str) -> Option<T>
44 where
45 T: Serialize + for<'de> Deserialize<'de>,
46 {
47 self.extra
48 .get(key)
49 .and_then(|v| serde_json::from_value::<T>(v.clone()).ok())
50 }
51 pub fn get_shop_id(&self) -> Option<i64> {
52 self.get_extra("shopid")
53 }
54}
55
56impl CacheAble for LoginInfo {
57 fn field() -> impl AsRef<str> {
58 "login_info"
59 }
60}