Skip to main content

winprint_ext/ticket/
copies.rs

1use super::{
2    document::{ParameterInit, PrintTicketDocument, PropertyValue, NS_PSK},
3    PrintTicket,
4};
5use xml::name::OwnedName;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
8#[repr(transparent)]
9/// Represents the number of copies.
10///
11/// # Example
12/// ```rust
13/// use winprint_ext::ticket::Copies;
14///
15/// let copies = Copies(1);
16/// assert_eq!(copies.0, 1);
17/// ```
18pub struct Copies(pub u16);
19
20impl From<Copies> for PrintTicket {
21    fn from(copies: Copies) -> Self {
22        PrintTicketDocument {
23            properties: vec![],
24            parameter_inits: vec![ParameterInit {
25                name: OwnedName::qualified("JobCopiesAllDocuments", NS_PSK, Some("psk")),
26                value: PropertyValue::Integer(copies.0 as i32),
27            }],
28            features: vec![],
29        }
30        .into()
31    }
32}
33
34#[cfg(all(test, feature = "test-utils"))]
35mod tests {
36    use crate::{
37        test_utils::null_device,
38        ticket::{PrintCapabilities, PrintTicketBuilder},
39    };
40
41    #[test]
42    fn use_max_copies() {
43        let device = null_device::thread_local();
44        let capabilities = PrintCapabilities::fetch(&device).unwrap();
45        let copies = capabilities.max_copies().unwrap();
46        println!("Max copies: {:?}", copies);
47        let mut builder = PrintTicketBuilder::new(&device).unwrap();
48        builder.merge(copies).unwrap();
49    }
50}
51