Merge pull request #616 from quartiq/adapter-core-fmt-write

e-io-adapters: add ToFmt: impl fmt::Write
This commit is contained in:
Dario Nieuwenhuis 2024-07-26 10:27:34 +00:00 committed by GitHub
commit 4e9f3ed89e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 45 additions and 1 deletions

View File

@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
Add unreleased changes here
- Added `ToFmt` adapter for `core::fmt::Write`.
## 0.6.1 - 2023-11-28

View File

@ -0,0 +1,42 @@
//! Adapters to the `core::fmt::Write`.
/// Adapter to the `core::fmt::Write` trait.
#[derive(Clone, Default, PartialEq, Debug)]
pub struct ToFmt<T: ?Sized> {
inner: T,
}
impl<T> ToFmt<T> {
/// Create a new adapter.
pub fn new(inner: T) -> Self {
Self { inner }
}
/// Consume the adapter, returning the inner object.
pub fn into_inner(self) -> T {
self.inner
}
}
impl<T: ?Sized> ToFmt<T> {
/// Borrow the inner object.
pub fn inner(&self) -> &T {
&self.inner
}
/// Mutably borrow the inner object.
pub fn inner_mut(&mut self) -> &mut T {
&mut self.inner
}
}
impl<T: embedded_io::Write + ?Sized> core::fmt::Write for ToFmt<T> {
fn write_str(&mut self, s: &str) -> core::fmt::Result {
self.inner.write_all(s.as_bytes()).or(Err(core::fmt::Error))
}
// Use fmt::Write default impls for
// * write_fmt(): better here than e-io::Write::write_fmt
// since we don't need to bother with saving the Error
// * write_char(): would be the same
}

View File

@ -3,6 +3,8 @@
#![warn(missing_docs)]
#![doc = include_str!("../README.md")]
pub mod fmt;
#[cfg(feature = "std")]
#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
pub mod std;