changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate rust/lib/sxp/src/nostd.rs

changeset 698: 96958d3eb5b0
parent: 0ccbbd142694
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
8
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
1
 //! nostd.rs --- nostd support
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
3
 //! Reimplements core logic and types from `std::io` in an `alloc`-friendly
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
4
 //! fashion.
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
5
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
6
 use alloc::vec::Vec;
67
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
7
 use core::{
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
8
   fmt::{self, Display},
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
9
   result,
0ccbbd142694 rust cleanup, added rocksdb bindings
ellis <ellis@rwest.io>
parents: 8
diff changeset
10
 };
8
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
11
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
12
 pub enum ErrorKind {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
13
   Other,
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
14
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
15
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
16
 // I/O errors can never occur in no-std mode. All our no-std I/O implementations
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
17
 // are infallible.
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
18
 pub struct Error;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
19
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
20
 impl Display for Error {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
21
   fn fmt(&self, _formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
22
     unreachable!()
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
23
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
24
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
25
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
26
 impl Error {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
27
   pub(crate) fn new(_kind: ErrorKind, _error: &'static str) -> Error {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
28
     Error
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
29
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
30
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
31
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
32
 pub type Result<T> = result::Result<T, Error>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
33
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
34
 pub trait Write {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
35
   fn write(&mut self, buf: &[u8]) -> Result<usize>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
36
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
37
   fn write_all(&mut self, buf: &[u8]) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
38
     // All our Write impls in no_std mode always write the whole buffer in
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
39
     // one call infallibly.
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
40
     let result = self.write(buf);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
41
     debug_assert!(result.is_ok());
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
42
     debug_assert_eq!(result.unwrap_or(0), buf.len());
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
43
     Ok(())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
44
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
45
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
46
   fn flush(&mut self) -> Result<()>;
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
47
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
48
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
49
 impl<W: Write> Write for &mut W {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
50
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
51
   fn write(&mut self, buf: &[u8]) -> Result<usize> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
52
     (*self).write(buf)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
53
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
54
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
55
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
56
   fn write_all(&mut self, buf: &[u8]) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
57
     (*self).write_all(buf)
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
58
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
59
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
60
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
61
   fn flush(&mut self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
62
     (*self).flush()
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
63
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
64
 }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
65
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
66
 impl Write for Vec<u8> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
67
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
68
   fn write(&mut self, buf: &[u8]) -> Result<usize> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
69
     self.extend_from_slice(buf);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
70
     Ok(buf.len())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
71
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
72
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
73
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
74
   fn write_all(&mut self, buf: &[u8]) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
75
     self.extend_from_slice(buf);
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
76
     Ok(())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
77
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
78
 
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
79
   #[inline]
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
80
   fn flush(&mut self) -> Result<()> {
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
81
     Ok(())
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
82
   }
1227f932b628 rust import
ellis <ellis@rwest.io>
parents:
diff changeset
83
 }