kona_std_fpvm/
types.rs

1//! This module contains the local types for the `kona-std-fpvm` crate.
2
3/// File descriptors available to the `client` within the FPVM kernel.
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
5pub enum FileDescriptor {
6    /// Read-only standard input stream.
7    StdIn,
8    /// Write-only standaard output stream.
9    StdOut,
10    /// Write-only standard error stream.
11    StdErr,
12    /// Read-only. Used to read the status of pre-image hinting.
13    HintRead,
14    /// Write-only. Used to provide pre-image hints
15    HintWrite,
16    /// Read-only. Used to read pre-images.
17    PreimageRead,
18    /// Write-only. Used to request pre-images.
19    PreimageWrite,
20}
21
22impl From<FileDescriptor> for usize {
23    fn from(fd: FileDescriptor) -> Self {
24        match fd {
25            FileDescriptor::StdIn => 0,
26            FileDescriptor::StdOut => 1,
27            FileDescriptor::StdErr => 2,
28            FileDescriptor::HintRead => 3,
29            FileDescriptor::HintWrite => 4,
30            FileDescriptor::PreimageRead => 5,
31            FileDescriptor::PreimageWrite => 6,
32        }
33    }
34}
35
36impl From<FileDescriptor> for i32 {
37    fn from(fd: FileDescriptor) -> Self {
38        usize::from(fd) as Self
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn test_file_descriptor_into_usize() {
48        assert_eq!(usize::from(FileDescriptor::StdIn), 0);
49        assert_eq!(usize::from(FileDescriptor::StdOut), 1);
50        assert_eq!(usize::from(FileDescriptor::StdErr), 2);
51        assert_eq!(usize::from(FileDescriptor::HintRead), 3);
52        assert_eq!(usize::from(FileDescriptor::HintWrite), 4);
53        assert_eq!(usize::from(FileDescriptor::PreimageRead), 5);
54        assert_eq!(usize::from(FileDescriptor::PreimageWrite), 6);
55    }
56
57    #[test]
58    fn test_file_descriptor_into_i32() {
59        assert_eq!(i32::from(FileDescriptor::StdIn), 0);
60        assert_eq!(i32::from(FileDescriptor::StdOut), 1);
61        assert_eq!(i32::from(FileDescriptor::StdErr), 2);
62        assert_eq!(i32::from(FileDescriptor::HintRead), 3);
63        assert_eq!(i32::from(FileDescriptor::HintWrite), 4);
64        assert_eq!(i32::from(FileDescriptor::PreimageRead), 5);
65        assert_eq!(i32::from(FileDescriptor::PreimageWrite), 6);
66    }
67}