opentitanlib/io/
console.rs1use std::task::{Context, Poll};
6
7use anyhow::Result;
8use serde::{Deserialize, Serialize};
9use thiserror::Error;
10
11use crate::impl_serializable_error;
12
13pub mod broadcast;
14mod buf;
15mod coverage;
16#[cfg(test)]
17mod coverage_test;
18pub mod ext;
19mod logged;
20pub use broadcast::Broadcaster;
21pub use buf::Buffered;
22pub use coverage::CoverageMiddleware;
23pub use ext::ConsoleExt;
24pub use logged::Logged;
25
26#[derive(Error, Debug, Serialize, Deserialize)]
28pub enum ConsoleError {
29 #[error("Timed Out")]
30 TimedOut,
31 #[error("{0}")]
32 GenericError(String),
33}
34impl_serializable_error!(ConsoleError);
35
36pub trait ConsoleDevice {
37 fn poll_read(&self, cx: &mut Context<'_>, buf: &mut [u8]) -> Poll<Result<usize>>;
42
43 fn write(&self, buf: &[u8]) -> Result<()>;
45
46 fn as_coverage_console(&self) -> Option<&dyn CoverageConsole> {
48 None
49 }
50}
51
52pub trait CoverageConsole {
54 fn coverage_blocks_processed(&self) -> usize;
56}