1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use serde::{Deserialize, Serialize};

#[derive(Default, Debug, Deserialize)]
pub struct Platen {
    #[serde(rename = "PlatenInputCaps", default)]
    pub platen_input_caps: PlatenInputCaps,
}

#[derive(Default, Debug, Deserialize)]
pub struct PlatenInputCaps {
    #[serde(rename = "MinWidth", default)]
    pub min_width: u16,
    #[serde(rename = "MaxWidth", default)]
    pub max_width: i16,
    #[serde(rename = "MinHeight", default)]
    pub min_height: i16,
    #[serde(rename = "MaxHeight", default)]
    pub max_height: i16,
    #[serde(rename = "MaxScanRegions", default)]
    pub max_scan_regions: u16,
    // TODO: Make SettingProfiles
    // TODO: Make SupportedIntents
    #[serde(rename = "MaxOpticalXResolution", default)]
    pub max_optical_xresolution: u16,
    #[serde(rename = "MaxOpticalYResolution", default)]
    pub max_optical_yresolution: u16,
    #[serde(rename = "RiskyLeftMargin", default)]
    pub risky_left_margin: u16,
    #[serde(rename = "RiskyRightMargin", default)]
    pub risky_right_margin: u16,
    #[serde(rename = "RiskyTopMargin", default)]
    pub risky_top_margin: u16,
    #[serde(rename = "RiskyBottomMargin", default)]
    pub risky_bottom_margin: u16,
}

#[derive(Default, Debug, Deserialize)]
pub struct CompressionFactorSupport {
    #[serde(rename = "Min", default)]
    pub min: i8,
    #[serde(rename = "Max", default)]
    pub max: i8,
    #[serde(rename = "Normal", default)]
    pub normal: i8,
    #[serde(rename = "Step", default)]
    pub step: i8,
}

#[derive(Default, Debug, Deserialize)]
pub struct SupportedMediaTypes {
    #[serde(rename = "MediaType", default)]
    pub media_types: Vec<String>,
}

#[derive(Default, Debug, Deserialize)]
pub struct SharpenSupport {
    #[serde(rename = "Min", default)]
    pub min: i8,
    #[serde(rename = "Max", default)]
    pub max: i8,
    #[serde(rename = "Normal", default)]
    pub normal: i8,
    #[serde(rename = "Step", default)]
    pub step: i8,
}

#[derive(Default, Debug, Deserialize)]
pub struct ScannerCapabilities {
    #[serde(rename = "Version", default)]
    pub version: String,
    #[serde(rename = "MakeAndModel", default)]
    pub make_and_model: String,
    #[serde(rename = "SerialNumber", default)]
    pub serial_number: String,
    #[serde(rename = "UUID", default)]
    pub uuid: String,
    #[serde(rename = "AdminURI", default)]
    pub admin_uri: String,
    #[serde(rename = "IconURI", default)]
    pub icon_uri: String,
    #[serde(rename = "Platen", default)]
    pub platen: Platen,
    #[serde(rename = "CompressionFactorSupport", default)]
    pub compression_factor_support: CompressionFactorSupport,
    #[serde(rename = "SupportedMediaTypes", default)]
    pub supported_media_types: SupportedMediaTypes,
    #[serde(rename = "SharpenSupport", default)]
    pub sharpen_support: SharpenSupport,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(rename = "scan:ScanRegion")]
pub struct ScanRegion {
    #[serde(rename = "pwg:XOffset")]
    pub x_offset: i16,
    #[serde(rename = "pwg:YOffset")]
    pub y_offset: i16,
    #[serde(rename = "pwg:Width")]
    pub width: i16,
    #[serde(rename = "pwg:Height")]
    pub height: i16,
    #[serde(rename = "pwg:ContentRegionUnits")]
    pub content_region_units: String,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(rename = "scan:ScanSettings")]
pub struct ScanSettings {
    #[serde(rename = "pwg:Version")]
    pub version: String,
    #[serde(rename = "pwg:ScanRegions")]
    pub scan_regions: ScanRegion,
    #[serde(rename = "scan:InputSource")]
    pub input_source: String,
    #[serde(rename = "scan:ColorMode")]
    pub color_mode: String,
    #[serde(rename = "scan:XResolution")]
    pub x_resolution: i16,
    #[serde(rename = "scan:YResolution")]
    pub y_resolution: i16,
}