use serde::{Deserialize, Serialize}; #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GetUserRegionApi { pub user_id: u32, } impl From for GetUserRegionApi { fn from(user_id: u32) -> Self { Self { user_id } } } impl From for Vec { fn from( GetUserRegionApiResp { user_id, user_region_list, .. }: GetUserRegionApiResp, ) -> Self { user_region_list .into_iter() .map( |UserRegion { region_id, play_count, created, }| { UserRegionFlatten { user_id, region_id, play_count, created, } }, ) .collect() } } #[derive(Default, Debug, Clone, PartialEq)] #[cfg_attr(feature = "parquet", derive(parquet_derive::ParquetRecordWriter))] pub struct UserRegionFlatten { pub user_id: u32, pub region_id: u32, pub play_count: i64, pub created: String, } #[cfg_attr(feature = "bincode", derive(bincode::Encode, bincode::Decode))] #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct GetUserRegionApiResp { pub user_id: u32, pub length: i64, pub user_region_list: Vec, } #[cfg_attr(feature = "bincode", derive(bincode::Encode, bincode::Decode))] #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct UserRegion { pub region_id: u32, pub play_count: i64, pub created: String, }