1#![allow(clippy::too_many_arguments)]
7
8#[allow(unused_imports)]
9use std::borrow::Cow;
10#[allow(unused_imports)]
11use std::convert::TryInto;
12#[allow(unused_imports)]
13use crate::utils::RawFdContainer;
14#[allow(unused_imports)]
15use crate::x11_utils::{Request, RequestHeader, Serialize, TryParse, TryParseFd};
16use std::io::IoSlice;
17use crate::connection::RequestConnection;
18#[allow(unused_imports)]
19use crate::connection::Connection as X11Connection;
20#[allow(unused_imports)]
21use crate::cookie::{Cookie, CookieWithFds, VoidCookie};
22use crate::errors::ConnectionError;
23#[allow(unused_imports)]
24use crate::errors::ReplyOrIdError;
25use std::future::Future;
26use std::pin::Pin;
27#[allow(unused_imports)]
28use super::xproto;
29
30pub use x11rb_protocol::protocol::dpms::*;
31
32async fn major_opcode<Conn: RequestConnection + ?Sized>(conn: &Conn) -> Result<u8, ConnectionError> {
34 let info = conn.extension_information(X11_EXTENSION_NAME).await?;
35 let info = info.ok_or(ConnectionError::UnsupportedExtension)?;
36 Ok(info.major_opcode)
37}
38
39pub async fn get_version<Conn>(conn: &Conn, client_major_version: u16, client_minor_version: u16) -> Result<Cookie<'_, Conn, GetVersionReply>, ConnectionError>
40where
41 Conn: RequestConnection + ?Sized,
42{
43 let request0 = GetVersionRequest {
44 client_major_version,
45 client_minor_version,
46 };
47 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
48 let slices = [IoSlice::new(&bytes[0])];
49 assert_eq!(slices.len(), bytes.len());
50 conn.send_request_with_reply(&slices, fds).await
51}
52pub async fn capable<Conn>(conn: &Conn) -> Result<Cookie<'_, Conn, CapableReply>, ConnectionError>
53where
54 Conn: RequestConnection + ?Sized,
55{
56 let request0 = CapableRequest;
57 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
58 let slices = [IoSlice::new(&bytes[0])];
59 assert_eq!(slices.len(), bytes.len());
60 conn.send_request_with_reply(&slices, fds).await
61}
62pub async fn get_timeouts<Conn>(conn: &Conn) -> Result<Cookie<'_, Conn, GetTimeoutsReply>, ConnectionError>
63where
64 Conn: RequestConnection + ?Sized,
65{
66 let request0 = GetTimeoutsRequest;
67 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
68 let slices = [IoSlice::new(&bytes[0])];
69 assert_eq!(slices.len(), bytes.len());
70 conn.send_request_with_reply(&slices, fds).await
71}
72pub async fn set_timeouts<Conn>(conn: &Conn, standby_timeout: u16, suspend_timeout: u16, off_timeout: u16) -> Result<VoidCookie<'_, Conn>, ConnectionError>
73where
74 Conn: RequestConnection + ?Sized,
75{
76 let request0 = SetTimeoutsRequest {
77 standby_timeout,
78 suspend_timeout,
79 off_timeout,
80 };
81 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
82 let slices = [IoSlice::new(&bytes[0])];
83 assert_eq!(slices.len(), bytes.len());
84 conn.send_request_without_reply(&slices, fds).await
85}
86pub async fn enable<Conn>(conn: &Conn) -> Result<VoidCookie<'_, Conn>, ConnectionError>
87where
88 Conn: RequestConnection + ?Sized,
89{
90 let request0 = EnableRequest;
91 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
92 let slices = [IoSlice::new(&bytes[0])];
93 assert_eq!(slices.len(), bytes.len());
94 conn.send_request_without_reply(&slices, fds).await
95}
96pub async fn disable<Conn>(conn: &Conn) -> Result<VoidCookie<'_, Conn>, ConnectionError>
97where
98 Conn: RequestConnection + ?Sized,
99{
100 let request0 = DisableRequest;
101 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
102 let slices = [IoSlice::new(&bytes[0])];
103 assert_eq!(slices.len(), bytes.len());
104 conn.send_request_without_reply(&slices, fds).await
105}
106pub async fn force_level<Conn>(conn: &Conn, power_level: DPMSMode) -> Result<VoidCookie<'_, Conn>, ConnectionError>
107where
108 Conn: RequestConnection + ?Sized,
109{
110 let request0 = ForceLevelRequest {
111 power_level,
112 };
113 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
114 let slices = [IoSlice::new(&bytes[0])];
115 assert_eq!(slices.len(), bytes.len());
116 conn.send_request_without_reply(&slices, fds).await
117}
118pub async fn info<Conn>(conn: &Conn) -> Result<Cookie<'_, Conn, InfoReply>, ConnectionError>
119where
120 Conn: RequestConnection + ?Sized,
121{
122 let request0 = InfoRequest;
123 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
124 let slices = [IoSlice::new(&bytes[0])];
125 assert_eq!(slices.len(), bytes.len());
126 conn.send_request_with_reply(&slices, fds).await
127}
128pub async fn select_input<Conn>(conn: &Conn, event_mask: EventMask) -> Result<VoidCookie<'_, Conn>, ConnectionError>
129where
130 Conn: RequestConnection + ?Sized,
131{
132 let request0 = SelectInputRequest {
133 event_mask,
134 };
135 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
136 let slices = [IoSlice::new(&bytes[0])];
137 assert_eq!(slices.len(), bytes.len());
138 conn.send_request_without_reply(&slices, fds).await
139}
140pub trait ConnectionExt: RequestConnection {
142 fn dpms_get_version(&self, client_major_version: u16, client_minor_version: u16) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, GetVersionReply>, ConnectionError>> + Send + '_>>
143 {
144 Box::pin(get_version(self, client_major_version, client_minor_version))
145 }
146 fn dpms_capable(&self) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, CapableReply>, ConnectionError>> + Send + '_>>
147 {
148 Box::pin(capable(self))
149 }
150 fn dpms_get_timeouts(&self) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, GetTimeoutsReply>, ConnectionError>> + Send + '_>>
151 {
152 Box::pin(get_timeouts(self))
153 }
154 fn dpms_set_timeouts(&self, standby_timeout: u16, suspend_timeout: u16, off_timeout: u16) -> Pin<Box<dyn Future<Output = Result<VoidCookie<'_, Self>, ConnectionError>> + Send + '_>>
155 {
156 Box::pin(set_timeouts(self, standby_timeout, suspend_timeout, off_timeout))
157 }
158 fn dpms_enable(&self) -> Pin<Box<dyn Future<Output = Result<VoidCookie<'_, Self>, ConnectionError>> + Send + '_>>
159 {
160 Box::pin(enable(self))
161 }
162 fn dpms_disable(&self) -> Pin<Box<dyn Future<Output = Result<VoidCookie<'_, Self>, ConnectionError>> + Send + '_>>
163 {
164 Box::pin(disable(self))
165 }
166 fn dpms_force_level(&self, power_level: DPMSMode) -> Pin<Box<dyn Future<Output = Result<VoidCookie<'_, Self>, ConnectionError>> + Send + '_>>
167 {
168 Box::pin(force_level(self, power_level))
169 }
170 fn dpms_info(&self) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, InfoReply>, ConnectionError>> + Send + '_>>
171 {
172 Box::pin(info(self))
173 }
174 fn dpms_select_input(&self, event_mask: EventMask) -> Pin<Box<dyn Future<Output = Result<VoidCookie<'_, Self>, ConnectionError>> + Send + '_>>
175 {
176 Box::pin(select_input(self, event_mask))
177 }
178}
179
180impl<C: RequestConnection + ?Sized> ConnectionExt for C {}