Implement full SSD1306 OLED display support: - Splash screen on boot (1.5s) with project name, version, board - Dashboard showing radio state, config, counters, RSSI/SNR - RSSI history sparkline (64-sample ring buffer, 2px-wide bars) - DisplayOn/DisplayOff host commands routed via dedicated channel - Pure render functions against generic DrawTarget (no hardware coupling) - Display on/off control bypasses radio task entirely Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
82 lines
2.4 KiB
Rust
82 lines
2.4 KiB
Rust
//! A low-level interface for writing out TOML
|
|
//!
|
|
//! Considerations when serializing arbitrary data:
|
|
//! - Verify the implementation with [`toml-test-harness`](https://docs.rs/toml-test-harness)
|
|
//! - Be sure to group keys under a table before writing another table
|
|
//! - Watch for extra trailing newlines and leading newlines, both when starting with top-level
|
|
//! keys or a table
|
|
//! - When serializing an array-of-tables, be sure to verify that all elements of the array
|
|
//! serialize as tables
|
|
//! - Standard tables and inline tables may need separate implementations of corner cases,
|
|
//! requiring verifying them both
|
|
//!
|
|
//! When serializing Rust data structures
|
|
//! - `Option`: Skip key-value pairs with a value of `None`, otherwise error when seeing `None`
|
|
//! - When skipping key-value pairs, be careful that a deeply nested `None` doesn't get skipped
|
|
//! - Scalars and arrays are unsupported as top-level data types
|
|
//! - Tuples and tuple variants seriallize as arrays
|
|
//! - Structs, struct variants, and maps serialize as tables
|
|
//! - Newtype variants serialize as to the inner type
|
|
//! - Unit variants serialize to a string
|
|
//! - Unit and unit structs don't have a clear meaning in TOML
|
|
//!
|
|
//! # Example
|
|
//!
|
|
//! ```rust
|
|
//! use toml_write::TomlWrite as _;
|
|
//!
|
|
//! # fn main() -> std::fmt::Result {
|
|
//! let mut output = String::new();
|
|
//! output.newline()?;
|
|
//! output.open_table_header()?;
|
|
//! output.key("table")?;
|
|
//! output.close_table_header()?;
|
|
//! output.newline()?;
|
|
//!
|
|
//! output.key("key")?;
|
|
//! output.space()?;
|
|
//! output.keyval_sep()?;
|
|
//! output.space()?;
|
|
//! output.value("value")?;
|
|
//! output.newline()?;
|
|
//!
|
|
//! assert_eq!(output, r#"
|
|
//! [table]
|
|
//! key = "value"
|
|
//! "#);
|
|
//! # Ok(())
|
|
//! # }
|
|
//! ```
|
|
|
|
#![cfg_attr(all(not(feature = "std"), not(test)), no_std)]
|
|
#![cfg_attr(docsrs, feature(doc_auto_cfg))]
|
|
#![forbid(unsafe_code)]
|
|
#![warn(clippy::std_instead_of_core)]
|
|
#![warn(clippy::std_instead_of_alloc)]
|
|
#![warn(clippy::print_stderr)]
|
|
#![warn(clippy::print_stdout)]
|
|
|
|
#[cfg(feature = "alloc")]
|
|
extern crate alloc;
|
|
|
|
mod key;
|
|
mod string;
|
|
mod value;
|
|
mod write;
|
|
|
|
#[cfg(feature = "alloc")]
|
|
pub use key::ToTomlKey;
|
|
pub use key::WriteTomlKey;
|
|
pub use string::TomlKey;
|
|
pub use string::TomlKeyBuilder;
|
|
pub use string::TomlString;
|
|
pub use string::TomlStringBuilder;
|
|
#[cfg(feature = "alloc")]
|
|
pub use value::ToTomlValue;
|
|
pub use value::WriteTomlValue;
|
|
pub use write::TomlWrite;
|
|
|
|
#[doc = include_str!("../README.md")]
|
|
#[cfg(doctest)]
|
|
pub struct ReadmeDoctests;
|