a10/
config.rs

1//! [`Config`]uration module.
2
3use std::io;
4
5use crate::Ring;
6
7/// Configuration of a [`Ring`].
8///
9/// Created by calling [`Ring::config`].
10#[derive(Debug, Clone)]
11#[must_use = "no ring is created until `a10::Config::build` is called"]
12pub struct Config<'r> {
13    pub(crate) queued_operations: usize,
14    /// Implementation specific configuration.
15    pub(crate) sys: crate::sys::config::Config<'r>,
16}
17
18impl<'r> Config<'r> {
19    /// Build a new [`Ring`].
20    #[doc(alias = "kqueue")]
21    #[doc(alias = "io_uring_setup")]
22    pub fn build(self) -> io::Result<Ring> {
23        // NOTE: defined in the implementation specific configuration code.
24        let queued_operations = self.queued_operations;
25        let (submissions, shared, completions) = self.build_sys()?;
26        let ring = Ring::build(submissions, shared, completions, queued_operations);
27        Ok(ring)
28    }
29}