mm_client_common/
display_params.rs

1// Copyright 2024 Colin Marc <hi@colinmarc.com>
2//
3// SPDX-License-Identifier: MIT
4
5use mm_protocol as protocol;
6
7use crate::{pixel_scale::PixelScale, validation::*};
8
9#[derive(Debug, Clone, PartialEq, Eq, uniffi::Record)]
10pub struct DisplayParams {
11    pub width: u32,
12    pub height: u32,
13    pub framerate: u32,
14    pub ui_scale: PixelScale,
15}
16
17impl TryFrom<protocol::VirtualDisplayParameters> for DisplayParams {
18    type Error = ValidationError;
19
20    fn try_from(msg: protocol::VirtualDisplayParameters) -> Result<Self, Self::Error> {
21        let res = required_field!(msg.resolution)?;
22
23        Ok(DisplayParams {
24            width: res.width,
25            height: res.height,
26            framerate: msg.framerate_hz,
27            ui_scale: required_field!(msg.ui_scale)?.try_into()?,
28        })
29    }
30}
31
32impl From<DisplayParams> for protocol::VirtualDisplayParameters {
33    fn from(value: DisplayParams) -> Self {
34        protocol::VirtualDisplayParameters {
35            resolution: Some(protocol::Size {
36                width: value.width,
37                height: value.height,
38            }),
39            framerate_hz: value.framerate,
40            ui_scale: Some(value.ui_scale.into()),
41        }
42    }
43}