pub trait IoProvider {
Show 25 methods
// Required methods
fn read_char(&mut self, port: PortId) -> Result<char, IoErrorKind>;
fn peek_char(&mut self, port: PortId) -> Result<char, IoErrorKind>;
fn char_ready(&mut self, port: PortId) -> Result<bool, IoErrorKind>;
fn write_char(&mut self, port: PortId, c: char) -> Result<(), IoErrorKind>;
fn write_str(&mut self, port: PortId, s: &str) -> Result<(), IoErrorKind>;
fn flush(&mut self, port: PortId) -> Result<(), IoErrorKind>;
fn close_port(&mut self, port: PortId) -> Result<(), IoErrorKind>;
fn is_input_port(&self, port: PortId) -> bool;
fn is_output_port(&self, port: PortId) -> bool;
// Provided methods
fn is_port_open(&self, _port: PortId) -> bool { ... }
fn is_textual_port(&self, port: PortId) -> bool { ... }
fn is_binary_port(&self, _port: PortId) -> bool { ... }
fn open_input_string(&mut self, _s: &str) -> Result<PortId, IoErrorKind> { ... }
fn open_output_string(&mut self) -> Result<PortId, IoErrorKind> { ... }
fn get_output_string(&self, _port: PortId) -> Result<&str, IoErrorKind> { ... }
fn file_exists(&self, _path: &str) -> Result<bool, IoErrorKind> { ... }
fn delete_file(&mut self, _path: &str) -> Result<(), IoErrorKind> { ... }
fn read_file(&mut self, _path: &str) -> Result<&str, IoErrorKind> { ... }
fn command_line_count(&self) -> Result<usize, IoErrorKind> { ... }
fn command_line_arg(&self, _index: usize) -> Result<&str, IoErrorKind> { ... }
fn get_environment_variable(
&mut self,
_name: &str,
) -> Result<Option<&str>, IoErrorKind> { ... }
fn environment_variables_count(&mut self) -> Result<usize, IoErrorKind> { ... }
fn environment_variable_at(
&self,
_index: usize,
) -> Result<(&str, &str), IoErrorKind> { ... }
fn exit_process(&mut self, _code: i32) -> Result<(), IoErrorKind> { ... }
fn emergency_exit_process(&mut self, _code: i32) -> Result<(), IoErrorKind> { ... }
}Expand description
Trait for providing I/O operations to the evaluator.
This trait defines the boundary between the pure no_std evaluator
and platform-specific I/O implementations. The grift_std crate
provides a standard implementation backed by Rust’s std::io.
§Implementor Notes
PortId::STDIN,PortId::STDOUT, andPortId::STDERRshould always be accepted as valid ports.- Implementations may support additional dynamically-opened ports
(e.g. file ports) by returning fresh
PortIdvalues.
Required Methods§
Sourcefn read_char(&mut self, port: PortId) -> Result<char, IoErrorKind>
fn read_char(&mut self, port: PortId) -> Result<char, IoErrorKind>
Read a single character from the specified input port.
Sourcefn peek_char(&mut self, port: PortId) -> Result<char, IoErrorKind>
fn peek_char(&mut self, port: PortId) -> Result<char, IoErrorKind>
Peek at the next character without consuming it.
Sourcefn char_ready(&mut self, port: PortId) -> Result<bool, IoErrorKind>
fn char_ready(&mut self, port: PortId) -> Result<bool, IoErrorKind>
Return true if a character is ready on the input port.
Sourcefn write_char(&mut self, port: PortId, c: char) -> Result<(), IoErrorKind>
fn write_char(&mut self, port: PortId, c: char) -> Result<(), IoErrorKind>
Write a single character to the specified output port.
Sourcefn write_str(&mut self, port: PortId, s: &str) -> Result<(), IoErrorKind>
fn write_str(&mut self, port: PortId, s: &str) -> Result<(), IoErrorKind>
Write a string slice to the specified output port.
Sourcefn close_port(&mut self, port: PortId) -> Result<(), IoErrorKind>
fn close_port(&mut self, port: PortId) -> Result<(), IoErrorKind>
Close the specified port.
Sourcefn is_input_port(&self, port: PortId) -> bool
fn is_input_port(&self, port: PortId) -> bool
Return true if the port is an input port.
Sourcefn is_output_port(&self, port: PortId) -> bool
fn is_output_port(&self, port: PortId) -> bool
Return true if the port is an output port.
Provided Methods§
Sourcefn is_port_open(&self, _port: PortId) -> bool
fn is_port_open(&self, _port: PortId) -> bool
Return true if the port is still open.
Default: returns true (assumes ports are open unless overridden).
Sourcefn is_textual_port(&self, port: PortId) -> bool
fn is_textual_port(&self, port: PortId) -> bool
Return true if the port is a textual port.
Default: returns true for any valid input or output port.
Sourcefn is_binary_port(&self, _port: PortId) -> bool
fn is_binary_port(&self, _port: PortId) -> bool
Return true if the port is a binary port.
Default: returns false (all ports are textual by default).
Sourcefn open_input_string(&mut self, _s: &str) -> Result<PortId, IoErrorKind>
fn open_input_string(&mut self, _s: &str) -> Result<PortId, IoErrorKind>
Open an input port that reads from the given string.
Returns a fresh PortId for the new port.
Default: returns IoErrorKind::Unsupported.
Sourcefn open_output_string(&mut self) -> Result<PortId, IoErrorKind>
fn open_output_string(&mut self) -> Result<PortId, IoErrorKind>
Open an output port that accumulates characters into a string buffer.
Returns a fresh PortId for the new port.
Default: returns IoErrorKind::Unsupported.
Sourcefn get_output_string(&self, _port: PortId) -> Result<&str, IoErrorKind>
fn get_output_string(&self, _port: PortId) -> Result<&str, IoErrorKind>
Retrieve the accumulated string from an output string port.
The port must have been created by open_output_string.
Default: returns IoErrorKind::Unsupported.
Sourcefn file_exists(&self, _path: &str) -> Result<bool, IoErrorKind>
fn file_exists(&self, _path: &str) -> Result<bool, IoErrorKind>
Check whether a file exists at the given path.
Default: returns IoErrorKind::Unsupported.
Sourcefn delete_file(&mut self, _path: &str) -> Result<(), IoErrorKind>
fn delete_file(&mut self, _path: &str) -> Result<(), IoErrorKind>
Delete the file at the given path.
Default: returns IoErrorKind::Unsupported.
Sourcefn read_file(&mut self, _path: &str) -> Result<&str, IoErrorKind>
fn read_file(&mut self, _path: &str) -> Result<&str, IoErrorKind>
Read the entire contents of a file as a string.
Default: returns IoErrorKind::Unsupported.
Sourcefn command_line_count(&self) -> Result<usize, IoErrorKind>
fn command_line_count(&self) -> Result<usize, IoErrorKind>
Return the number of command-line arguments.
Default: returns IoErrorKind::Unsupported.
Sourcefn command_line_arg(&self, _index: usize) -> Result<&str, IoErrorKind>
fn command_line_arg(&self, _index: usize) -> Result<&str, IoErrorKind>
Return the command-line argument at the given index.
Default: returns IoErrorKind::Unsupported.
Sourcefn get_environment_variable(
&mut self,
_name: &str,
) -> Result<Option<&str>, IoErrorKind>
fn get_environment_variable( &mut self, _name: &str, ) -> Result<Option<&str>, IoErrorKind>
Retrieve the value of an environment variable by name.
Returns Ok(Some(value)) if found, Ok(None) if not set.
Default: returns IoErrorKind::Unsupported.
Sourcefn environment_variables_count(&mut self) -> Result<usize, IoErrorKind>
fn environment_variables_count(&mut self) -> Result<usize, IoErrorKind>
Return the number of environment variables.
Must be called before environment_variable_at
to snapshot the current environment.
Default: returns IoErrorKind::Unsupported.
Sourcefn environment_variable_at(
&self,
_index: usize,
) -> Result<(&str, &str), IoErrorKind>
fn environment_variable_at( &self, _index: usize, ) -> Result<(&str, &str), IoErrorKind>
Return the environment variable name and value at the given index.
environment_variables_count must be
called first to snapshot the environment.
Default: returns IoErrorKind::Unsupported.
Sourcefn exit_process(&mut self, _code: i32) -> Result<(), IoErrorKind>
fn exit_process(&mut self, _code: i32) -> Result<(), IoErrorKind>
Exit the process with the given status code.
Default: returns IoErrorKind::Unsupported.
Sourcefn emergency_exit_process(&mut self, _code: i32) -> Result<(), IoErrorKind>
fn emergency_exit_process(&mut self, _code: i32) -> Result<(), IoErrorKind>
Emergency exit the process (no cleanup) with the given status code.
Default: returns IoErrorKind::Unsupported.