interpolator-0.5.0/.cargo_vcs_info.json0000644000000001360000000000100135600ustar { "git": { "sha1": "3000bc114c12b8a4d7cc480e480e0e1af12dfcb8" }, "path_in_vcs": "" }interpolator-0.5.0/CHANGELOG.md000064400000000000000000000033631046102023000141660ustar 00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [0.5.0] - 2023-04-17 ### Changed - **Breaking Changed**: `format` and `write` take `Context` trait, this breaks type inference - `i` allows access to outer variables ### Added - `set_{trait}` functions on `Formattable` - Macros for format, write and print ## [0.4.0] - 2023-03-01 ### Changed - **Breaking Change**: Made error enums `non_exhaustive` - Added `Copy` implementation to `Trait` and `Formattable` ## [0.3.0] - 2023-03-01 ### Added - `i` gained implicit format `({})` when none is specified `{:i}` - `i` gained support for indexing single values without range `{:i1}` ### Changed - **Breaking Change**: `i` uses `{}` instead of `{it}` ## [0.2.0] - 2023-02-28 ### Added - `i` iter format ### Changed - **Breaking Change**: Improved naming of error enums and variants ## [0.1.2] - 2023-02-27 Fixed `include` in Cargo.toml ## [0.1.1] - 2023-02-27 Fixed URLs in Cargo.toml ## [0.1.0] - 2023-02-27 Initial release [unreleased]: https://github.com/ModProg/interpolator/compare/v0.5.0...HEAD [0.5.0]: https://github.com/ModProg/interpolator/compare/v0.4.0...v0.5.0 [0.4.0]: https://github.com/ModProg/interpolator/compare/v0.3.0...v0.4.0 [0.3.0]: https://github.com/ModProg/interpolator/compare/v0.2.0...v0.3.0 [0.2.0]: https://github.com/ModProg/interpolator/compare/v0.1.2...v0.2.0 [0.1.2]: https://github.com/ModProg/interpolator/compare/v0.1.1...v0.1.2 [0.1.1]: https://github.com/ModProg/interpolator/compare/v0.1.0...v0.1.1 [0.1.0]: https://github.com/ModProg/interpolator/v0.1.0 interpolator-0.5.0/Cargo.toml0000644000000034620000000000100115630ustar # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO # # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies # to registry (e.g., crates.io) dependencies. # # If you are reading this file be aware that the original Cargo.toml # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. [package] edition = "2021" name = "interpolator" version = "0.5.0" include = [ "src/**/*", "LICENSE-*", "README.md", "CHANGELOG.md", ] description = "runtime format strings, fully compatible with std's macros" documentation = "https://docs.rs/interpolator" readme = "README.md" keywords = [ "text", "interpolation", "format", ] categories = [ "template-engine", "value-formatting", "text-processing", ] license = "MIT OR Apache-2.0" repository = "https://github.com/ModProg/interpolator" [package.metadata.docs.rs] all-features = true rustdoc-args = [ "--cfg", "docsrs", ] [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = '## \[Unreleased\]' replace = """ ## [{{version}}] - {{date}}""" [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = '\[unreleased\]: (.*)/(v.*)\.\.\.HEAD' replace = """ [unreleased]: $1/{{tag_name}}...HEAD [{{version}}]: $1/$2...{{tag_name}}""" [dev-dependencies.collection_literals] version = "1.0.1" [dev-dependencies.derive_more] version = "0.99.17" [dev-dependencies.proptest] version = "1.1.0" [dev-dependencies.proptest-derive] version = "0.3.0" [dev-dependencies.quote] version = "1.0.23" [dev-dependencies.trybuild2] version = "1.0.0" [features] debug = [] iter = [] number = [] pointer = [] interpolator-0.5.0/Cargo.toml.orig000064400000000000000000000025221046102023000152400ustar 00000000000000[package] name = "interpolator" version = "0.5.0" edition = "2021" categories = ["template-engine", "value-formatting", "text-processing"] description = "runtime format strings, fully compatible with std's macros" keywords = ["text", "interpolation", "format"] license = "MIT OR Apache-2.0" readme = "README.md" repository = "https://github.com/ModProg/interpolator" documentation = "https://docs.rs/interpolator" include = ["src/**/*", "LICENSE-*", "README.md", "CHANGELOG.md"] [features] # default = ["debug", "number", "pointer", "iter"] debug = [] number = [] pointer = [] iter = [] [dev-dependencies] assert-dbg = { path = "assert-dbg" } collection_literals = "1.0.1" derive_more = "0.99.17" proptest = "1.1.0" proptest-derive = "0.3.0" quote = "1.0.23" trybuild2 = "1.0.0" # docs.rs-specific configuration [package.metadata.docs.rs] # document all features all-features = true # defines the configuration attribute `docsrs` rustdoc-args = ["--cfg", "docsrs"] [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = '## \[Unreleased\]' replace = """ ## [{{version}}] - {{date}}\ """ [[package.metadata.release.pre-release-replacements]] file = "CHANGELOG.md" search = '\[unreleased\]: (.*)/(v.*)\.\.\.HEAD' replace = """ [unreleased]: $1/{{tag_name}}...HEAD [{{version}}]: $1/$2...{{tag_name}}\ """ interpolator-0.5.0/LICENSE-APACHE000064400000000000000000000261351046102023000143030ustar 00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a peretual, worldwide, non-exclusive, no-cpharge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides it s Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. interpolator-0.5.0/LICENSE-MIT000064400000000000000000000020631046102023000140050ustar 00000000000000MIT License Copyright (c) 2023 Roland Fredenhagen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. interpolator-0.5.0/README.md000064400000000000000000000067601046102023000136400ustar 00000000000000# interpolator [![CI Status](https://github.com/ModProg/interpolator/actions/workflows/test.yaml/badge.svg)](https://github.com/ModProg/interpolator/actions/workflows/test.yaml) [![Documentation for `main`](https://img.shields.io/badge/docs-main-informational)](https://modprog.github.io/interpolator/interpolator/) [![Crates.io](https://img.shields.io/crates/v/interpolator)](https://crates.io/crates/interpolator) [![Docs.rs](https://img.shields.io/crates/v/interpolator?color=informational&label=docs.rs)](https://docs.rs/interpolator) Runtime implementation of `format!`. # `format` Runtime version of `format!`. Takes a string and a context, containing `Formattable` values, returns a string. ```rs use std::collections::HashMap; use template::{format, Formattable}; let formatted = format( "{value:+05}", // could be dynamic &[("value", Formattable::display(&12))].into_iter().collect::>(), ) .unwrap(); assert_eq!(formatted, format!("{:+05}", 12)); ``` # `write` Runtime version of `write!`. Takes a mutable `Write` e.g. `&mut String`, a format string and a context, containing `Formattable` values. ```rs use std::collections::HashMap; use template::{write, Formattable}; let mut buf = String::new(); write( &mut buf, "{value:+05}", // could be dynamic &[("value", Formattable::display(&12))].into_iter().collect::>(), ) .unwrap(); assert_eq!(buf, format!("{:+05}", 12)); ``` # `i` iter format The feature `iter` enables an additional format trait `i`, it allows to format a list of values with a format string and an optional join expression. The syntax is `{list:i(the format string, '{}' is the array element)(the join)}`, an empty join can also be omitted `{list:i({})}`. If join is omitted the format string `{}` can be omitted as well `{list:i}`. Should you need to use `)` inside your format string or join, you can add `#` similar to rust's [raw string](https://doc.rust-lang.org/reference/tokens.html#raw-string-literals) (i.e. `#(({}))#`). It is also possible to only iterate a sub-slice specified through a range before the format string, i.e. `{list:i1..4}`. For open ranges range bounds can also be omitted. To index from the end, you can use negative range bounds. It is also possible to index a single value by only specifying an `isize` `{list:i1}`. A `Formattable` implementing iter is created using `Formattable::iter`: ```rs // HashMap macro use collection_literals::hash; use interpolator::{format, Formattable}; // Needs to be a slice of references because `Formattable::display` expects a // reference let items = [&"hello", &"hi", &"hey"].map(Formattable::display); let items = Formattable::iter(&items); let format_str = "Greetings: {items:i..-1(`{it}`)(, )} and {items:i-1..(`{it}`)}"; assert_eq!( format(format_str, &hash!("items" => items))?, "Greetings: `hello`, `hi` and `hey`" ); # return Ok::<(), interpolator::Error>(()) ``` # Features By default only `Display` is supported, the rest of the [formatting traits](https://doc.rust-lang.org/std/fmt/index.html#formatting-traits) can be enabled through the following features. - `debug` enables `?`, `x?` and `X?` trait specifiers - `number` enables `x`, `X`, `b`, `o`, `e` and `E` trait specifiers - `pointer` enables `p` trait specifiers - `iter` enables `i` trait specifier interpolator-0.5.0/src/error.rs000064400000000000000000000131501046102023000146360ustar 00000000000000use super::*; /// Error returned by [`format()`]. #[derive(Debug, PartialEq, Clone)] #[non_exhaustive] pub enum Error { /// Value was formatted with unimplemented trait. /// - `.0` the trait /// - `.1` the byte index of the format argument MissingTraitImpl(Trait, usize), /// Error occurred while calling `::fmt` /// - `.0` the error /// - `.1` the byte index of the format argument Fmt(FmtError, usize), /// Error occurred while parsing format string Parse(ParseError), /// Tried to format value that was not in context /// - `.0` the ident of the value /// - `.1` the byte index of the format argument MissingValue(String, usize), /// Unsupported Option was used. /// - `.0` is the option /// - `.1` the feature that needs to be enabled to use it /// - `.2` the byte index of the format argument UnsupportedOption(&'static str, &'static str, usize), } #[cfg(feature = "iter")] impl Error { pub(crate) fn add_idx(self, idx: usize) -> Self { use Error::*; match self { MissingTraitImpl(t, i) => MissingTraitImpl(t, i + idx), Fmt(e, i) => Fmt(e, i), Parse(e) => Parse(e.add_idx(idx)), MissingValue(v, i) => MissingValue(v, i + idx), UnsupportedOption(o, f, i) => UnsupportedOption(o, f, i + idx), } } } impl From for Error { fn from(value: ParseError) -> Self { Self::Parse(value) } } impl Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Error::MissingTraitImpl(t, idx) => write!( f, "trait `{t:?}` not implemented, used by format argument at {idx}" ), Error::Fmt(e, idx) => write!(f, "error while formatting at {idx}: {e}"), Error::Parse(e) => write!(f, "error while parsing input: {e}"), Error::MissingValue(ident, idx) => { write!(f, "specified value not in context `{ident}` at {idx}") } Error::UnsupportedOption(option, feature, idx) => write!( f, "option `{option}` is not supported without feature `{feature}` at {idx}" ), } } } impl StdError for Error {} /// The trait used to format. #[derive(Debug, PartialEq, Eq, Clone, Copy)] #[non_exhaustive] pub enum Trait { /// [`Binary`] #[cfg(feature = "number")] Binary, /// [`Debug`] #[cfg(feature = "debug")] Debug, /// [`Display`] Display, /// [`LowerExp`] #[cfg(feature = "number")] LowerExp, /// [`LowerHex`] #[cfg(feature = "number")] LowerHex, /// [`Octal`] #[cfg(feature = "number")] Octal, /// [`Pointer`] #[cfg(feature = "pointer")] Pointer, /// [`UpperExp`] #[cfg(feature = "number")] UpperExp, /// [`UpperHex`] #[cfg(feature = "number")] UpperHex, #[cfg(feature = "iter")] /// Custom "trait" that allows iterating over lists i.e. `&[Formattable]` Iter, } /// Error caused by invalid format string #[derive(Debug, PartialEq, Clone)] #[non_exhaustive] pub enum ParseError { /// Format spec at byte index is nether closed with a `}` FormatSpecUnclosed(usize), /// Expected sequence at byte index Expected(&'static str, usize), /// Unable to parse specified width as usize InvalidWidth(ParseIntError, usize), /// Unable to parse specified precision as usize InvalidPrecision(ParseIntError, usize), /// Fill is not supported due to [rust-lang/rfcs#3394](https://github.com/rust-lang/rfcs/pull/3394). Fill(usize), /// Width, precision, `-`, `+` and `#` are not supported for `i` Iter(usize), /// Unable to parse specified range bound as isize RangeBound(ParseIntError, usize), } #[cfg(feature = "iter")] impl ParseError { pub(crate) fn add_idx(self, idx: usize) -> ParseError { use ParseError::*; match self { FormatSpecUnclosed(i) => FormatSpecUnclosed(i + idx), Expected(c, i) => Expected(c, i + idx), InvalidWidth(e, i) => InvalidWidth(e, i + idx), InvalidPrecision(e, i) => InvalidPrecision(e, i + idx), Fill(i) => Fill(i + idx), Iter(i) => Iter(i + idx), RangeBound(e, i) => RangeBound(e, i + idx), } } } impl Display for ParseError { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { ParseError::FormatSpecUnclosed(idx) => { write!(f, "Format spec at {idx} is nether closed with a `}}`") } ParseError::Expected(c, idx) => write!(f, "Expected `{c}` at {idx}"), ParseError::InvalidWidth(e, idx) => { write!(f, "Unable to parse width at {idx} as usize: {e}") } ParseError::InvalidPrecision(e, idx) => { write!(f, "Unable to parse precision at {idx} as usize: {e}") } ParseError::Fill(idx) => write!( f, "Fill is not supported due to https://github.com/rust-lang/rfcs/pull/3394 at {idx}" ), ParseError::Iter(idx) => write!( f, "Width, precision, `-`, `+` and `#` are not supported for `i` at {idx}" ), ParseError::RangeBound(e, idx) => { write!(f, "Unable to parse range bound at {idx} as isize: {e}") } } } } impl StdError for ParseError {} macro_rules! ensure { ($condition:expr, $error:expr) => { if !$condition { return Err($error.into()); } }; } interpolator-0.5.0/src/fmt/binary.rs000064400000000000000000000410551046102023000155640ustar 00000000000000format_value! {binary(out, value, Binary): (None, None, A::None, S::None, false, false) => write!(out, "{value:b}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0b}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+b}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0b}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-b}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0b}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0b}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+b}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0b}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-b}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0b}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^b}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0b}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+b}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0b}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-b}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0b}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>b}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0b}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+b}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0b}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-b}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0b}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#b}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0b}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#b}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0b}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#b}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0b}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#b}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0b}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#b}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0b}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#b}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0b}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#b}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0b}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#b}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0b}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#b}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0b}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#b}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0b}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#b}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0b}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#b}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0b}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$b}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$b}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$b}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$b}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$b}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$b}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$b}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$b}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$b}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$b}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$b}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$b}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$b}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$b}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$b}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$b}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$b}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$b}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$b}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$b}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$b}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$b}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$b}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$b}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$b}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$b}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$b}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$b}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$b}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$b}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$b}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$b}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$b}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$b}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$b}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$b}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$b}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$b}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$b}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$b}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$b}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$b}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$b}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$b}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$b}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$b}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$b}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$b}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$b}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$b}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$b}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$b}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$b}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$b}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$b}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$b}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$b}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$b}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$b}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$b}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$b}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$b}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$b}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$b}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$b}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$b}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$b}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$b}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$b}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$b}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$b}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$b}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$b}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$b}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$b}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$b}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$b}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$b}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$b}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$b}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$b}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$b}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$b}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$b}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$b}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$b}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$b}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$b}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$b}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$b}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$b}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$b}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$b}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$b}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$b}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$b}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$b}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$b}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$b}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$b}"), } interpolator-0.5.0/src/fmt/debug.rs000064400000000000000000000410531046102023000153640ustar 00000000000000format_value! {debug(out, value, Debug): (None, None, A::None, S::None, false, false) => write!(out, "{value:?}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0?}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+?}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0?}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-?}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0?}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0?}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+?}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0?}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-?}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0?}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^?}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0?}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+?}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0?}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-?}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0?}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>?}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0?}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+?}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0?}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-?}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0?}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#?}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0?}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#?}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0?}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#?}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0?}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#?}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0?}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#?}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0?}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#?}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0?}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#?}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0?}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#?}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0?}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#?}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0?}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#?}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0?}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#?}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0?}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#?}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0?}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$?}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$?}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$?}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$?}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$?}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$?}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$?}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$?}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$?}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$?}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$?}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$?}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$?}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$?}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$?}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$?}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$?}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$?}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$?}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$?}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$?}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$?}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$?}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$?}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$?}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$?}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$?}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$?}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$?}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$?}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$?}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$?}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$?}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$?}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$?}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$?}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$?}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$?}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$?}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$?}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$?}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$?}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$?}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$?}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$?}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$?}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$?}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$?}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$?}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$?}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$?}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$?}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$?}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$?}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$?}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$?}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$?}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$?}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$?}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$?}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$?}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$?}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$?}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$?}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$?}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$?}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$?}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$?}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$?}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$?}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$?}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$?}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$?}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$?}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$?}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$?}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$?}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$?}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$?}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$?}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$?}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$?}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$?}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$?}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$?}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$?}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$?}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$?}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$?}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$?}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$?}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$?}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$?}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$?}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$?}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$?}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$?}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$?}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$?}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$?}"), } interpolator-0.5.0/src/fmt/display.rs000064400000000000000000000405571046102023000157530ustar 00000000000000format_value! {display(out, value, Display): (None, None, A::None, S::None, false, false) => write!(out, "{value:}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value:<}"), (None, None, A::Left, S::None, false, true) => write!(out, "{value:<0}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$}"), } interpolator-0.5.0/src/fmt/iter.rs000064400000000000000000000104541046102023000152420ustar 00000000000000use crate::*; fn write_iter( out: &mut impl Write, value: &[Formattable<'_>], range: Option, format: Option<&str>, join: Option<&str>, context: &impl Context, ) -> Result { if value.is_empty() { return Ok(()); } let Range(lhs, inclusive, rhs) = range.unwrap_or(Range(None, false, None)); let rhs = rhs.unwrap_or(isize::MAX); let rhs = (usize::try_from(rhs).unwrap_or(value.len().saturating_sub(rhs.unsigned_abs())) + usize::from(inclusive)) .min(value.len()); let lhs = lhs.unwrap_or(0); let lhs = usize::try_from(lhs) .unwrap_or(value.len().saturating_sub(lhs.unsigned_abs())) .min(rhs); if rhs > lhs { if let Some(format) = format { for value in &value[lhs..rhs - 1] { write(out, format, &IterContext::new(context, *value))?; if let Some(join) = join { write(out, join, context)?; } } if let Some(value) = value[..rhs].last() { write(out, format, &IterContext::new(context, *value))?; } } else { for value in &value[lhs..rhs] { write!( out, "{}", value .get_display() .map_err(|e| Error::MissingTraitImpl(e, 0))? ) .map_err(|e| Error::Fmt(e, 0))?; } } } Ok(()) } #[allow(clippy::too_many_arguments)] pub(crate) fn iter( out: &mut impl Write, value: &[Formattable<'_>], width: Option, precision: Option, alignment: crate::Alignment, sign: Sign, hash: bool, zero: bool, range: Option, format: Option<&str>, join: Option<&str>, context: &impl Context, ) -> Result { match (precision, sign, hash, zero) { (None, Sign::None, false, false) => { if let Some(width) = width { let mut buf = String::new(); write_iter(&mut buf, value, range, format, join, context)?; match alignment { Alignment::Left | Alignment::None => write!(out, "{buf: write!(out, "{buf:^width$}"), Alignment::Right => write!(out, "{buf:>width$}"), } .map_err(|e| Error::Fmt(e, 0)) } else { write_iter(out, value, range, format, join, context) } } _ => Err(ParseError::Iter(0).into()), } } #[cfg(test)] mod test { use collection_literals::hash; use super::*; #[test] fn iter() { let list = &[&1, &5].map(Formattable::display); let context = &hash!("h"=> Formattable::iter(list)); assert_eq!( format("{h:i(`{:+05}`)#() )#}", context).unwrap(), "`+0001`) `+0005`" ); assert_eq!(format("{h:i(``)}", context).unwrap(), "````"); assert_eq!(format("{h:i..({})}", context).unwrap(), "15"); assert_eq!(format("{h:i1..({})}", context).unwrap(), "5"); assert_eq!(format("{h:i1..1({})}", context).unwrap(), ""); assert_eq!(format("{h:i2..1({})}", context).unwrap(), ""); assert_eq!(format("{h:i-1..({})}", context).unwrap(), "5"); assert_eq!(format("{h:i..-1({})}", context).unwrap(), "1"); assert_eq!(format("{h:i..-2({})}", context).unwrap(), ""); assert_eq!(format("{h:i-5..-10({})}", context).unwrap(), ""); assert_eq!(format("{h:i-1({})}", context).unwrap(), "5"); assert_eq!(format("{h:i1}", context).unwrap(), "5"); assert_eq!(format("{h:i..}", context).unwrap(), "15"); assert_eq!(format("{h:i}", context).unwrap(), "15"); assert_eq!(format("{h:i..1}", context).unwrap(), "1"); assert_eq!(format("{h:i1..}", context).unwrap(), "5"); assert_eq!(format("{h:i..=-1}", context).unwrap(), "15"); } #[test] fn outside_context() { let list = &[&"hi", &"ho"].map(Formattable::display); let context = &hash!("list" => Formattable::iter(list), "x" => Formattable::display(&"?!")); assert_eq!(format("{list:i({}{x})}", context).unwrap(), "hi?!ho?!"); assert_eq!(format("{list:i({})({x})}", context).unwrap(), "hi?!ho"); } } interpolator-0.5.0/src/fmt/lower_exp.rs000064400000000000000000000410621046102023000163020ustar 00000000000000format_value! {lower_exp(out, value, LowerExp): (None, None, A::None, S::None, false, false) => write!(out, "{value:e}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0e}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+e}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0e}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-e}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0e}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0e}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+e}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0e}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-e}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0e}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^e}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0e}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+e}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0e}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-e}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0e}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>e}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0e}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+e}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0e}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-e}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0e}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#e}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0e}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#e}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0e}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#e}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0e}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#e}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0e}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#e}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0e}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#e}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0e}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#e}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0e}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#e}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0e}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#e}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0e}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#e}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0e}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#e}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0e}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#e}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0e}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$e}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$e}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$e}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$e}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$e}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$e}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$e}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$e}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$e}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$e}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$e}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$e}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$e}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$e}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$e}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$e}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$e}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$e}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$e}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$e}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$e}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$e}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$e}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$e}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$e}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$e}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$e}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$e}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$e}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$e}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$e}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$e}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$e}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$e}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$e}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$e}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$e}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$e}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$e}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$e}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$e}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$e}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$e}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$e}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$e}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$e}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$e}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$e}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$e}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$e}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$e}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$e}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$e}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$e}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$e}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$e}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$e}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$e}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$e}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$e}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$e}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$e}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$e}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$e}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$e}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$e}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$e}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$e}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$e}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$e}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$e}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$e}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$e}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$e}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$e}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$e}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$e}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$e}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$e}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$e}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$e}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$e}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$e}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$e}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$e}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$e}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$e}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$e}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$e}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$e}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$e}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$e}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$e}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$e}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$e}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$e}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$e}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$e}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$e}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$e}"), } interpolator-0.5.0/src/fmt/lower_hex.rs000064400000000000000000000410621046102023000162720ustar 00000000000000format_value! {lower_hex(out, value, LowerHex): (None, None, A::None, S::None, false, false) => write!(out, "{value:x}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0x}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+x}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0x}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-x}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0x}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0x}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+x}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0x}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-x}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0x}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^x}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0x}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+x}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0x}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-x}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0x}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>x}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0x}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+x}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0x}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-x}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0x}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#x}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0x}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#x}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0x}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#x}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0x}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#x}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0x}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#x}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0x}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#x}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0x}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#x}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0x}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#x}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0x}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#x}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0x}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#x}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0x}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#x}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0x}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#x}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0x}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$x}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$x}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$x}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$x}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$x}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$x}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$x}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$x}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$x}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$x}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$x}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$x}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$x}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$x}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$x}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$x}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$x}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$x}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$x}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$x}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$x}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$x}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$x}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$x}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$x}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$x}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$x}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$x}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$x}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$x}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$x}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$x}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$x}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$x}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$x}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$x}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$x}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$x}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$x}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$x}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$x}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$x}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$x}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$x}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$x}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$x}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$x}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$x}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$x}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$x}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$x}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$x}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$x}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$x}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$x}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$x}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$x}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$x}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$x}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$x}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$x}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$x}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$x}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$x}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$x}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$x}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$x}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$x}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$x}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$x}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$x}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$x}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$x}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$x}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$x}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$x}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$x}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$x}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$x}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$x}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$x}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$x}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$x}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$x}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$x}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$x}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$x}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$x}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$x}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$x}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$x}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$x}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$x}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$x}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$x}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$x}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$x}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$x}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$x}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$x}"), } interpolator-0.5.0/src/fmt/lower_hex_question.rs000064400000000000000000000413701046102023000202230ustar 00000000000000format_value! {lower_hex_question(out, value, Debug): (None, None, A::None, S::None, false, false) => write!(out, "{value:x?}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0x?}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+x?}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0x?}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-x?}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0x?}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0x?}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+x?}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0x?}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-x?}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0x?}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^x?}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0x?}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+x?}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0x?}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-x?}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0x?}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>x?}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0x?}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+x?}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0x?}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-x?}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0x?}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#x?}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0x?}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#x?}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0x?}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#x?}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0x?}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#x?}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0x?}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#x?}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0x?}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#x?}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0x?}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#x?}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0x?}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#x?}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0x?}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#x?}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0x?}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#x?}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0x?}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#x?}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0x?}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#x?}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0x?}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$x?}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$x?}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$x?}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$x?}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$x?}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$x?}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$x?}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$x?}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$x?}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$x?}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$x?}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$x?}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$x?}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$x?}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$x?}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$x?}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$x?}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$x?}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$x?}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$x?}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$x?}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$x?}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$x?}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$x?}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$x?}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$x?}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$x?}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$x?}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$x?}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$x?}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$x?}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$x?}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$x?}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$x?}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$x?}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$x?}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$x?}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$x?}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$x?}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$x?}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$x?}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$x?}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$x?}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$x?}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$x?}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$x?}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$x?}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$x?}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$x?}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$x?}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$x?}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$x?}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$x?}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$x?}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$x?}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$x?}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$x?}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$x?}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$x?}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$x?}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$x?}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$x?}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$x?}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$x?}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$x?}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$x?}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$x?}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$x?}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$x?}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$x?}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$x?}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$x?}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$x?}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$x?}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$x?}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$x?}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$x?}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$x?}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$x?}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$x?}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$x?}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$x?}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$x?}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$x?}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$x?}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$x?}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$x?}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$x?}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$x?}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$x?}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$x?}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$x?}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$x?}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$x?}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$x?}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$x?}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$x?}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$x?}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$x?}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$x?}"), } interpolator-0.5.0/src/fmt/mod.rs000064400000000000000000000067571046102023000150710ustar 00000000000000#![allow(non_snake_case)] use super::*; macro_rules! format_value { ($name:ident($out:ident, $v:ident, $Trait:ident): $($tts:tt)*) => { #[allow(clippy::too_many_arguments)] pub(crate) fn $name( $out: &mut impl std::fmt::Write, $v: impl std::fmt::$Trait, width: Option, precision: Option, alignment: crate::Alignment, sign: crate::Sign, hash: bool, zero: bool, ) -> crate::Result<(), std::fmt::Error> { use {crate::Alignment as A, crate::Sign as S}; match (width, precision, alignment, sign, hash, zero) { $($tts)* } } }; } macro_rules! branch { (($_:ident), $($tts:tt)*) => { $($tts)* }; (($idx:ident return), $($tts:tt)*) => { return $($tts)*.map_err(|e|e.add_idx($idx)) }; } macro_rules! call_format_value { ( match $out:ident, $value:ident, $width:ident, $precision:ident, $alignment:ident, $sign:ident, $hash:ident, $zero:ident, $trait_:ident, $idx:ident { $($Trait:ident$(($($fields:tt)*))? => $fn:ident($getter:ident $(, $feature:literal)? $(, $args:ident)*) $($ret:ident)?,)* } ) => { match $trait_ { $($(#[cfg(feature = $feature)])? TraitSpec::$Trait$(($($fields)*))? => { let value = match $value.$getter() { Ok(v) => v, Err(e) => return Err(Error::MissingTraitImpl(e, $idx)) }; branch!(($idx $($ret)?),$fn::$fn($out, value, $width, $precision, $alignment, $sign, $hash, $zero, $($($fields)*)? $(, $args)*)) },)* TraitSpec::Phantom(_) => unreachable!() } }; } #[cfg(feature = "number")] mod binary; #[cfg(feature = "debug")] mod debug; mod display; #[cfg(feature = "iter")] mod iter; #[cfg(feature = "number")] mod lower_exp; #[cfg(feature = "number")] mod lower_hex; #[cfg(feature = "debug")] mod lower_hex_question; #[cfg(feature = "number")] mod octal; #[cfg(feature = "pointer")] mod pointer; #[cfg(feature = "number")] mod upper_exp; #[cfg(feature = "number")] mod upper_hex; #[cfg(feature = "debug")] mod upper_hex_debug; #[allow(clippy::too_many_arguments)] pub(crate) fn format_value( out: &mut impl Write, value: &Formattable, width: Option, precision: Option, alignment: Alignment, sign: Sign, hash: bool, zero: bool, trait_: TraitSpec, idx: usize, #[allow(unused)] context: &impl Context, ) -> Result<()> { call_format_value! { match out, value, width, precision, alignment, sign, hash, zero, trait_, idx { Display => display(get_display), Question => debug(get_debug, "debug"), LowerHexQuestion => lower_hex_question(get_debug, "debug"), UpperHexQuestion => upper_hex_debug(get_debug, "debug"), LowerHex => lower_hex(get_lower_hex, "number"), UpperHex => upper_hex(get_upper_hex, "number"), Binary => binary(get_binary, "number"), Octal => octal(get_octal, "number"), LowerExp => lower_exp(get_lower_exp, "number"), UpperExp => upper_exp(get_upper_exp, "number"), Pointer => pointer(get_pointer, "pointer"), Iter(range, format, join) => iter(get_iter, "iter", context) return, } } .map_err(|e| Error::Fmt(e, idx)) } interpolator-0.5.0/src/fmt/octal.rs000064400000000000000000000410531046102023000154000ustar 00000000000000format_value! {octal(out, value, Octal): (None, None, A::None, S::None, false, false) => write!(out, "{value:o}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0o}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+o}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0o}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-o}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0o}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0o}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+o}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0o}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-o}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0o}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^o}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0o}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+o}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0o}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-o}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0o}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>o}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0o}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+o}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0o}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-o}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0o}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#o}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0o}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#o}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0o}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#o}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0o}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#o}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0o}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#o}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0o}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#o}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0o}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#o}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0o}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#o}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0o}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#o}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0o}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#o}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0o}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#o}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0o}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#o}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0o}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$o}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$o}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$o}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$o}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$o}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$o}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$o}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$o}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$o}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$o}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$o}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$o}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$o}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$o}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$o}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$o}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$o}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$o}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$o}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$o}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$o}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$o}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$o}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$o}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$o}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$o}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$o}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$o}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$o}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$o}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$o}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$o}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$o}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$o}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$o}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$o}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$o}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$o}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$o}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$o}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$o}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$o}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$o}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$o}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$o}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$o}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$o}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$o}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$o}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$o}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$o}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$o}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$o}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$o}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$o}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$o}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$o}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$o}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$o}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$o}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$o}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$o}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$o}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$o}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$o}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$o}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$o}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$o}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$o}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$o}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$o}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$o}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$o}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$o}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$o}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$o}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$o}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$o}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$o}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$o}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$o}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$o}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$o}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$o}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$o}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$o}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$o}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$o}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$o}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$o}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$o}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$o}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$o}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$o}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$o}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$o}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$o}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$o}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$o}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$o}"), } interpolator-0.5.0/src/fmt/pointer.rs000064400000000000000000000410571046102023000157620ustar 00000000000000format_value! {pointer(out, value, Pointer): (None, None, A::None, S::None, false, false) => write!(out, "{value:p}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0p}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+p}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0p}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-p}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0p}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0p}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+p}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0p}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-p}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0p}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^p}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0p}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+p}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0p}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-p}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0p}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>p}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0p}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+p}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0p}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-p}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0p}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#p}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0p}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#p}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0p}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#p}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0p}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#p}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0p}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#p}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0p}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#p}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0p}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#p}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0p}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#p}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0p}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#p}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0p}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#p}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0p}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#p}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0p}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#p}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0p}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$p}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$p}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$p}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$p}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$p}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$p}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$p}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$p}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$p}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$p}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$p}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$p}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$p}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$p}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$p}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$p}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$p}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$p}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$p}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$p}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$p}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$p}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$p}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$p}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$p}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$p}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$p}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$p}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$p}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$p}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$p}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$p}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$p}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$p}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$p}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$p}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$p}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$p}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$p}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$p}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$p}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$p}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$p}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$p}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$p}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$p}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$p}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$p}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$p}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$p}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$p}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$p}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$p}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$p}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$p}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$p}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$p}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$p}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$p}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$p}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$p}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$p}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$p}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$p}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$p}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$p}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$p}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$p}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$p}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$p}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$p}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$p}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$p}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$p}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$p}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$p}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$p}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$p}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$p}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$p}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$p}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$p}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$p}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$p}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$p}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$p}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$p}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$p}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$p}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$p}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$p}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$p}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$p}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$p}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$p}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$p}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$p}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$p}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$p}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$p}"), } interpolator-0.5.0/src/fmt/upper_exp.rs000064400000000000000000000410621046102023000163050ustar 00000000000000format_value! {upper_exp(out, value, UpperExp): (None, None, A::None, S::None, false, false) => write!(out, "{value:E}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0E}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+E}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0E}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-E}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0E}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0E}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+E}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0E}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-E}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0E}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^E}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0E}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+E}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0E}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-E}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0E}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>E}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0E}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+E}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0E}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-E}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0E}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#E}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0E}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#E}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0E}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#E}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0E}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#E}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0E}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#E}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0E}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#E}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0E}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#E}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0E}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#E}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0E}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#E}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0E}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#E}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0E}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#E}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0E}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#E}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0E}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$E}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$E}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$E}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$E}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$E}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$E}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$E}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$E}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$E}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$E}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$E}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$E}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$E}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$E}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$E}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$E}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$E}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$E}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$E}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$E}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$E}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$E}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$E}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$E}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$E}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$E}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$E}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$E}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$E}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$E}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$E}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$E}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$E}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$E}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$E}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$E}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$E}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$E}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$E}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$E}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$E}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$E}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$E}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$E}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$E}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$E}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$E}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$E}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$E}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$E}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$E}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$E}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$E}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$E}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$E}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$E}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$E}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$E}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$E}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$E}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$E}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$E}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$E}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$E}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$E}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$E}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$E}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$E}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$E}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$E}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$E}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$E}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$E}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$E}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$E}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$E}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$E}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$E}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$E}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$E}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$E}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$E}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$E}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$E}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$E}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$E}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$E}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$E}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$E}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$E}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$E}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$E}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$E}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$E}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$E}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$E}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$E}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$E}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$E}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$E}"), } interpolator-0.5.0/src/fmt/upper_hex.rs000064400000000000000000000410621046102023000162750ustar 00000000000000format_value! {upper_hex(out, value, UpperHex): (None, None, A::None, S::None, false, false) => write!(out, "{value:X}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0X}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+X}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0X}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-X}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0X}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0X}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+X}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0X}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-X}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0X}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^X}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0X}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+X}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0X}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-X}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0X}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>X}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0X}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+X}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0X}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-X}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0X}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#X}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0X}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#X}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0X}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#X}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0X}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#X}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0X}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#X}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0X}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#X}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0X}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#X}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0X}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#X}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0X}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#X}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0X}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#X}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0X}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#X}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0X}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#X}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0X}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$X}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$X}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$X}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$X}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$X}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$X}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$X}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$X}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$X}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$X}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$X}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$X}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$X}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$X}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$X}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$X}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$X}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$X}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$X}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$X}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$X}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$X}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$X}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$X}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$X}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$X}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$X}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$X}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$X}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$X}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$X}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$X}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$X}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$X}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$X}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$X}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$X}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$X}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$X}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$X}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$X}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$X}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$X}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$X}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$X}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$X}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$X}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$X}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$X}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$X}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$X}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$X}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$X}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$X}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$X}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$X}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$X}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$X}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$X}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$X}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$X}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$X}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$X}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$X}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$X}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$X}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$X}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$X}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$X}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$X}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$X}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$X}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$X}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$X}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$X}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$X}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$X}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$X}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$X}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$X}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$X}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$X}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$X}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$X}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$X}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$X}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$X}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$X}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$X}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$X}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$X}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$X}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$X}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$X}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$X}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$X}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$X}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$X}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$X}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$X}"), } interpolator-0.5.0/src/fmt/upper_hex_debug.rs000064400000000000000000000413651046102023000174510ustar 00000000000000format_value! {upper_hex_debug(out, value, Debug): (None, None, A::None, S::None, false, false) => write!(out, "{value:X?}"), (None, None, A::None, S::None, false, true) => write!(out, "{value:0X?}"), (None, None, A::None, S::Plus, false, false) => write!(out, "{value:+X?}"), (None, None, A::None, S::Plus, false, true) => write!(out, "{value:+0X?}"), (None, None, A::None, S::Minus, false, false) => write!(out, "{value:-X?}"), (None, None, A::None, S::Minus, false, true) => write!(out, "{value:-0X?}"), (None, None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0X?}"), (None, None, A::Left, S::Plus, false, false) => write!(out, "{value:<+X?}"), (None, None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0X?}"), (None, None, A::Left, S::Minus, false, false) => write!(out, "{value:<-X?}"), (None, None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0X?}"), (None, None, A::Center, S::None, false, false) => write!(out, "{value:^X?}"), (None, None, A::Center, S::None, false, true) => write!(out, "{value:^0X?}"), (None, None, A::Center, S::Plus, false, false) => write!(out, "{value:^+X?}"), (None, None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0X?}"), (None, None, A::Center, S::Minus, false, false) => write!(out, "{value:^-X?}"), (None, None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0X?}"), (None, None, A::Right, S::None, false, false) => write!(out, "{value:>X?}"), (None, None, A::Right, S::None, false, true) => write!(out, "{value:>0X?}"), (None, None, A::Right, S::Plus, false, false) => write!(out, "{value:>+X?}"), (None, None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0X?}"), (None, None, A::Right, S::Minus, false, false) => write!(out, "{value:>-X?}"), (None, None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0X?}"), (None, None, A::None, S::None, true, false) => write!(out, "{value:#X?}"), (None, None, A::None, S::None, true, true) => write!(out, "{value:#0X?}"), (None, None, A::None, S::Plus, true, false) => write!(out, "{value:+#X?}"), (None, None, A::None, S::Plus, true, true) => write!(out, "{value:+#0X?}"), (None, None, A::None, S::Minus, true, false) => write!(out, "{value:-#X?}"), (None, None, A::None, S::Minus, true, true) => write!(out, "{value:-#0X?}"), (None, None, A::Left, S::None, true, false) => write!(out, "{value:<#X?}"), (None, None, A::Left, S::None, true, true) => write!(out, "{value:<#0X?}"), (None, None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#X?}"), (None, None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0X?}"), (None, None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#X?}"), (None, None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0X?}"), (None, None, A::Center, S::None, true, false) => write!(out, "{value:^#X?}"), (None, None, A::Center, S::None, true, true) => write!(out, "{value:^#0X?}"), (None, None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#X?}"), (None, None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0X?}"), (None, None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#X?}"), (None, None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0X?}"), (None, None, A::Right, S::None, true, false) => write!(out, "{value:>#X?}"), (None, None, A::Right, S::None, true, true) => write!(out, "{value:>#0X?}"), (None, None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#X?}"), (None, None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0X?}"), (None, None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#X?}"), (None, None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0X?}"), (None, Some(pr), A::None, S::None, false, false) => write!(out, "{value:.pr$X?}"), (None, Some(pr), A::None, S::None, false, true) => write!(out, "{value:0.pr$X?}"), (None, Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+.pr$X?}"), (None, Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0.pr$X?}"), (None, Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-.pr$X?}"), (None, Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0.pr$X?}"), (None, Some(pr), A::Left, S::None, false, false) => write!(out, "{value:<.pr$X?}"), (None, Some(pr), A::Left, S::None, false, true) => write!(out, "{value:<0.pr$X?}"), (None, Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+.pr$X?}"), (None, Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0.pr$X?}"), (None, Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-.pr$X?}"), (None, Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0.pr$X?}"), (None, Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^.pr$X?}"), (None, Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0.pr$X?}"), (None, Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+.pr$X?}"), (None, Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0.pr$X?}"), (None, Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-.pr$X?}"), (None, Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0.pr$X?}"), (None, Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>.pr$X?}"), (None, Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0.pr$X?}"), (None, Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+.pr$X?}"), (None, Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0.pr$X?}"), (None, Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-.pr$X?}"), (None, Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0.pr$X?}"), (None, Some(pr), A::None, S::None, true, false) => write!(out, "{value:#.pr$X?}"), (None, Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0.pr$X?}"), (None, Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#.pr$X?}"), (None, Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0.pr$X?}"), (None, Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#.pr$X?}"), (None, Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0.pr$X?}"), (None, Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#.pr$X?}"), (None, Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0.pr$X?}"), (None, Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#.pr$X?}"), (None, Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0.pr$X?}"), (None, Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#.pr$X?}"), (None, Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0.pr$X?}"), (None, Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#.pr$X?}"), (None, Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0.pr$X?}"), (None, Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#.pr$X?}"), (None, Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0.pr$X?}"), (None, Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#.pr$X?}"), (None, Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0.pr$X?}"), (None, Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#.pr$X?}"), (None, Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0.pr$X?}"), (None, Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#.pr$X?}"), (None, Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0.pr$X?}"), (None, Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#.pr$X?}"), (None, Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0.pr$X?}"), (Some(wi), None, A::None, S::None, false, false) => write!(out, "{value:wi$X?}"), (Some(wi), None, A::None, S::None, false, true) => write!(out, "{value:0wi$X?}"), (Some(wi), None, A::None, S::Plus, false, false) => write!(out, "{value:+wi$X?}"), (Some(wi), None, A::None, S::Plus, false, true) => write!(out, "{value:+0wi$X?}"), (Some(wi), None, A::None, S::Minus, false, false) => write!(out, "{value:-wi$X?}"), (Some(wi), None, A::None, S::Minus, false, true) => write!(out, "{value:-0wi$X?}"), (Some(wi), None, A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$X?}"), (Some(wi), None, A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$X?}"), (Some(wi), None, A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$X?}"), (Some(wi), None, A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$X?}"), (Some(wi), None, A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$X?}"), (Some(wi), None, A::Center, S::None, false, false) => write!(out, "{value:^wi$X?}"), (Some(wi), None, A::Center, S::None, false, true) => write!(out, "{value:^0wi$X?}"), (Some(wi), None, A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$X?}"), (Some(wi), None, A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$X?}"), (Some(wi), None, A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$X?}"), (Some(wi), None, A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$X?}"), (Some(wi), None, A::Right, S::None, false, false) => write!(out, "{value:>wi$X?}"), (Some(wi), None, A::Right, S::None, false, true) => write!(out, "{value:>0wi$X?}"), (Some(wi), None, A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$X?}"), (Some(wi), None, A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$X?}"), (Some(wi), None, A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$X?}"), (Some(wi), None, A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$X?}"), (Some(wi), None, A::None, S::None, true, false) => write!(out, "{value:#wi$X?}"), (Some(wi), None, A::None, S::None, true, true) => write!(out, "{value:#0wi$X?}"), (Some(wi), None, A::None, S::Plus, true, false) => write!(out, "{value:+#wi$X?}"), (Some(wi), None, A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$X?}"), (Some(wi), None, A::None, S::Minus, true, false) => write!(out, "{value:-#wi$X?}"), (Some(wi), None, A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$X?}"), (Some(wi), None, A::Left, S::None, true, false) => write!(out, "{value:<#wi$X?}"), (Some(wi), None, A::Left, S::None, true, true) => write!(out, "{value:<#0wi$X?}"), (Some(wi), None, A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$X?}"), (Some(wi), None, A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$X?}"), (Some(wi), None, A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$X?}"), (Some(wi), None, A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$X?}"), (Some(wi), None, A::Center, S::None, true, false) => write!(out, "{value:^#wi$X?}"), (Some(wi), None, A::Center, S::None, true, true) => write!(out, "{value:^#0wi$X?}"), (Some(wi), None, A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$X?}"), (Some(wi), None, A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$X?}"), (Some(wi), None, A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$X?}"), (Some(wi), None, A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$X?}"), (Some(wi), None, A::Right, S::None, true, false) => write!(out, "{value:>#wi$X?}"), (Some(wi), None, A::Right, S::None, true, true) => write!(out, "{value:>#0wi$X?}"), (Some(wi), None, A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$X?}"), (Some(wi), None, A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$X?}"), (Some(wi), None, A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$X?}"), (Some(wi), None, A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$X?}"), (Some(wi), Some(pr), A::None, S::None, false, false) => write!(out, "{value:wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::None, false, true) => write!(out, "{value:0wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Plus, false, false) => write!(out, "{value:+wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Plus, false, true) => write!(out, "{value:+0wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Minus, false, false) => write!(out, "{value:-wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Minus, false, true) => write!(out, "{value:-0wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::None, false, false) => write!(out, "{value: write!(out, "{value:<0wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Plus, false, false) => write!(out, "{value:<+wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Plus, false, true) => write!(out, "{value:<+0wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Minus, false, false) => write!(out, "{value:<-wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Minus, false, true) => write!(out, "{value:<-0wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::None, false, false) => write!(out, "{value:^wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::None, false, true) => write!(out, "{value:^0wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Plus, false, false) => write!(out, "{value:^+wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Plus, false, true) => write!(out, "{value:^+0wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Minus, false, false) => write!(out, "{value:^-wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Minus, false, true) => write!(out, "{value:^-0wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::None, false, false) => write!(out, "{value:>wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::None, false, true) => write!(out, "{value:>0wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Plus, false, false) => write!(out, "{value:>+wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Plus, false, true) => write!(out, "{value:>+0wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Minus, false, false) => write!(out, "{value:>-wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Minus, false, true) => write!(out, "{value:>-0wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::None, true, false) => write!(out, "{value:#wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::None, true, true) => write!(out, "{value:#0wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Plus, true, false) => write!(out, "{value:+#wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Plus, true, true) => write!(out, "{value:+#0wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Minus, true, false) => write!(out, "{value:-#wi$.pr$X?}"), (Some(wi), Some(pr), A::None, S::Minus, true, true) => write!(out, "{value:-#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::None, true, false) => write!(out, "{value:<#wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::None, true, true) => write!(out, "{value:<#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Plus, true, false) => write!(out, "{value:<+#wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Plus, true, true) => write!(out, "{value:<+#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Minus, true, false) => write!(out, "{value:<-#wi$.pr$X?}"), (Some(wi), Some(pr), A::Left, S::Minus, true, true) => write!(out, "{value:<-#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::None, true, false) => write!(out, "{value:^#wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::None, true, true) => write!(out, "{value:^#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Plus, true, false) => write!(out, "{value:^+#wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Plus, true, true) => write!(out, "{value:^+#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Minus, true, false) => write!(out, "{value:^-#wi$.pr$X?}"), (Some(wi), Some(pr), A::Center, S::Minus, true, true) => write!(out, "{value:^-#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::None, true, false) => write!(out, "{value:>#wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::None, true, true) => write!(out, "{value:>#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Plus, true, false) => write!(out, "{value:>+#wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Plus, true, true) => write!(out, "{value:>+#0wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Minus, true, false) => write!(out, "{value:>-#wi$.pr$X?}"), (Some(wi), Some(pr), A::Right, S::Minus, true, true) => write!(out, "{value:>-#0wi$.pr$X?}"), } interpolator-0.5.0/src/formattable.rs000064400000000000000000000146641046102023000160200ustar 00000000000000use super::*; /// Utility struct holding references to the trait implementation of a value to /// enable runtime verification and execution of them #[derive(Default, Clone, Copy)] #[must_use] pub struct Formattable<'a> { #[cfg(any(feature = "debug", feature = "number"))] debug: Option<&'a dyn Debug>, display: Option<&'a dyn Display>, #[cfg(feature = "number")] binary: Option<&'a dyn Binary>, #[cfg(feature = "number")] lower_exp: Option<&'a dyn LowerExp>, #[cfg(feature = "number")] lower_hex: Option<&'a dyn LowerHex>, #[cfg(feature = "number")] octal: Option<&'a dyn Octal>, #[cfg(feature = "number")] upper_exp: Option<&'a dyn UpperExp>, #[cfg(feature = "number")] upper_hex: Option<&'a dyn UpperHex>, #[cfg(feature = "pointer")] pointer: Option>, #[cfg(feature = "iter")] iter: Option<&'a [Formattable<'a>]>, } struct PlainString(&'static str); impl Debug for PlainString { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0) } } macro_rules! formattable_debug { ($($field:ident $(: $feature:literal)?),+ $(,)?) => { impl Debug for Formattable<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let mut tuple = f.debug_tuple("Formattable"); $( $(#[cfg(feature = $feature)])? if self.$field.is_some() { tuple.field(&PlainString(stringify!($field))); } )* tuple.finish() } } }; } formattable_debug! { debug: "debug", display, binary: "number", lower_exp: "number", lower_hex: "number", octal: "number", upper_exp: "number", upper_hex: "number", pointer: "pointer", iter: "iter" } macro_rules! formattable_fn { (($($cfg:tt)*), ($doc:expr), $name:ident, $builder:ident, $setter:ident <$($traits:ident),*> $($fields:ident),+) => { /// Creates a [`Formattable`] from a value implementing #[doc = $doc] $($cfg)* pub fn $name(value: &'a T) -> Self { #[allow(clippy::needless_update)] Self { $($fields: Some(value),)* ..Default::default() } } /// Adds implementation for #[doc = $doc] $($cfg)* pub fn $builder(mut self, value: &'a T) -> Self { $(self.$fields = Some(value);)* self } /// Sets implementation for #[doc = $doc] $($cfg)* pub fn $setter(&mut self, value: &'a T) { $(self.$fields = Some(value);)* } }; (($($cfg:tt)*), (), $name:ident, $builder:ident, $setter:ident, $getter:ident<$trait:ident>) => { formattable_fn!(($($cfg)*), (concat!("[`",stringify!($trait),"`]")), $name, $builder, $setter<$trait> $name); $($cfg)* pub(crate) fn $getter(&self) -> Result<&dyn $trait, Trait> { self.$name.ok_or(Trait::$trait) } }; } macro_rules! formattable { [$($($cfg:literal, $($doc:literal,)?)? $name:ident, $builder:ident, $setter:ident $(, $getter:ident)?<$($traits:ident),*> $($fields:ident),*;)*] => { impl<'a> Formattable<'a> { $(formattable_fn!(($(#[cfg(feature=$cfg)])?), ($($($doc)?)?), $name, $builder, $setter $(, $getter)?<$($traits),*> $($fields),*);)* } }; } formattable![ "debug", "[`Debug`] and [`Display`]", debug_display, and_debug_display, set_debug_display debug, display; "debug", debug, and_debug, set_debug, get_debug; display, and_display, set_display, get_display; "number", "[`Debug`], [`Display`], [`Octal`], [`LowerHex`], [`UpperHex`], [`Binary`], [`LowerExp`] and [`UpperExp`]", integer, and_integer, set_integer binary, debug, display, lower_exp, lower_hex, octal, upper_exp, upper_hex; "number", "[`Debug`], [`Display`], [`LowerExp`] and [`UpperExp`]", float, and_float, set_float debug, display, lower_exp, upper_exp; "number", binary, and_binary, set_binary, get_binary; "number", lower_exp, and_lower_exp, set_lower_exp, get_lower_exp; "number", lower_hex, and_lower_hex, set_lower_hex, get_lower_hex; "number", octal, and_octal, set_octal, get_octal; "number", upper_exp, and_upper_exp, set_upper_exp, get_upper_exp; "number", upper_hex, and_upper_hex, set_upper_hex, get_upper_hex; ]; #[cfg(feature = "pointer")] impl<'a> Formattable<'a> { /// Creates a [`Formattable`] from a value implementing [`Pointer`]. pub fn pointer(value: &'a T) -> Self { Self::default().and_pointer(value) } /// Adds implementation for [`Pointer`] pub fn and_pointer(mut self, value: &'a T) -> Self { self.pointer = Some(PointerWrapper(value)); self } /// Sets implementation for [`Pointer`] pub fn set_pointer(&mut self, value: &'a T) { self.pointer = Some(PointerWrapper(value)); } pub(crate) fn get_pointer(&self) -> Result { self.pointer.ok_or(Trait::Pointer) } } #[cfg(feature = "iter")] impl<'a> Formattable<'a> { /// Creates a [`Formattable`] from a list of values pub fn iter(value: &'a [Formattable<'a>]) -> Self { Self::default().and_iter(value) } /// Adds implementation for mapping operations pub fn and_iter(mut self, value: &'a [Formattable<'a>]) -> Self { self.iter = Some(value); self } /// Sets implementation for mapping operations pub fn set_iter(&mut self, value: &'a [Formattable<'a>]) { self.iter = Some(value); } pub(crate) fn get_iter(&self) -> Result<&'a [Formattable<'a>], Trait> { self.iter.ok_or(Trait::Iter) } } #[cfg(feature = "pointer")] #[derive(Clone, Copy)] pub(crate) struct PointerWrapper<'a>(&'a dyn Pointer); #[cfg(feature = "pointer")] impl Pointer for PointerWrapper<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { Pointer::fmt(self.0, f) } } #[cfg(all(feature = "display", feature = "debug"))] impl<'a, T: Display + Debug> From<&'a T> for Formattable<'a> { fn from(value: &'a T) -> Self { Self::debug_display(value) } } interpolator-0.5.0/src/lib.rs000064400000000000000000000205151046102023000142560ustar 00000000000000//! Runtime implementation of [`format!`](std::format). //! //! # `std::fmt` compatible formatting //! //! All options but the fill character for alignment is supported //! (due to [rust-lang/rfcs#3394](https://github.com/rust-lang/rfcs/pull/3394)). //! //! Though the non [`Display`] traits need to be enabled through //! [features](#features). //! //! ``` //! # use std::collections::HashMap; //! use interpolator::{format, Formattable}; //! //! let formatted = format( //! "{value:+05}", // could be dynamic //! &[("value", Formattable::display(&12))] //! .into_iter() //! .collect::>(), //! )?; //! //! assert_eq!(formatted, format!("{:+05}", 12)); //! # return Ok::<(), interpolator::Error>(()) //! ``` #![cfg_attr( feature = "iter", doc = r#" # `i` iter format The feature `iter` enables an additional format trait `i`, it allows to format a list of values with a format string and an optional join expression. The syntax is `{list:i(the format string, '{}' is the array element)(the join)}`, an empty join can also be omitted `{list:i({})}`. If join is omitted the format string `{}` can be omitted as well `{list:i}`. Should you need to use `)` inside your format string or join, you can add `#` similar to rust's [raw string](https://doc.rust-lang.org/reference/tokens.html#raw-string-literals) (i.e. `#(({}))#`). It is also possible to only iterate a sub-slice specified through a range before the format string, i.e. `{list:i1..4}`. For open ranges range bounds can also be omitted. To index from the end, you can use negative range bounds. It is also possible to index a single value by only specifying an [`isize`] `{list:i1}`. A [`Formattable`] implementing iter is created using [`Formattable::iter`]: ``` // HashMap macro use collection_literals::hash; use interpolator::{format, Formattable}; // Needs to be a slice of references because `Formattable::display` expects a // reference let items = [&"hello", &"hi", &"hey"].map(Formattable::display); let items = Formattable::iter(&items); let format_str = "Greetings: {items:i..-1(`{}{outside}`)(, )} and `{items:i-1}{outside}`"; assert_eq!( format(format_str, &hash!("items" => items, "outside" => Formattable::display(&'!')))?, "Greetings: `hello!`, `hi!` and `hey!`" ); # return Ok::<(), interpolator::Error>(()) ```"# )] //! See [`format()`] and [`write()`] for details. //! //! # Macros //! //! To simplify creating contexts, some macros are provided. //! //! - [`context!`] creates a [`HashMap<&str, Formattable>`](HashMap) to be used //! with [`format()`]. #![cfg_attr( feature = "iter", doc = r"- [`list!`] creates a [`Formattable`] implementing supporting [iter](`i`-iter-format)." )] //! - [`iformat!`] and [`iwrite!`] macros matching the behaviour of [`format()`] //! and [`write()`] but allowing to specify context directly. //! - Most of std's formatting macros are supported with an `i` prefix: //! - [`iwriteln!`] //! - [`iprint!`] //! - [`iprintln!`] //! - [`ieprint!`] //! - [`ieprintln!`] //! //! # Features //! By default only [`Display`] is supported, the rest of the //! [formatting traits](https://doc.rust-lang.org/std/fmt/index.html#formatting-traits) //! can be enabled through the following features. //! //! - `debug` enables `?`, `x?` and `X?` trait specifiers //! - `number` enables `x`, `X`, `b`, `o`, `e` and `E` trait specifiers //! - `pointer` enables `p` trait specifiers //! - `iter` enables [`i`](#i-iter-format) trait specifier #![warn(clippy::pedantic, missing_docs)] #![allow( clippy::wildcard_imports, clippy::implicit_hasher, clippy::enum_glob_use, clippy::module_name_repetitions )] #![cfg_attr(docsrs, feature(doc_auto_cfg))] use std::borrow::Borrow; use std::collections::HashMap; use std::error::Error as StdError; #[cfg(feature = "pointer")] use std::fmt::Pointer; #[cfg(feature = "number")] use std::fmt::{Binary, LowerExp, LowerHex, Octal, UpperExp, UpperHex}; use std::fmt::{Debug, Display, Error as FmtError, Write}; use std::hash::Hash; use std::num::ParseIntError; #[macro_use] mod error; pub use error::*; mod fmt; use fmt::format_value; mod formattable; pub use formattable::*; mod parser; use parser::*; mod macros; type Result = std::result::Result; /// Runtime version of [`format!`]. /// /// Takes a string and a context, containing [`Formattable`] values, returns a /// string. /// /// ``` /// # use std::collections::HashMap; /// use interpolator::{format, Formattable}; /// /// let formatted = format( /// "{value:+05}", // could be dynamic /// &[("value", Formattable::display(&12))] /// .into_iter() /// .collect::>(), /// ) /// .unwrap(); /// /// assert_eq!(formatted, format!("{:+05}", 12)); /// ``` /// /// # Errors /// /// It will return an error if the specified format string has invalid syntax, /// the type doesn't implement the expected trait, or the formatting itself /// failed. /// /// For more details have a look at [`Error`] and [`ParseError`]. pub fn format(format: &str, context: &impl Context) -> Result { let mut out = String::with_capacity(format.len()); write(&mut out, format, context)?; Ok(out) } /// Context for `format` and `write` pub trait Context { /// Returns the [`Formattable`] for the requested key fn get(&self, key: &str) -> Option; } impl + Eq + Hash> Context for HashMap> { fn get(&self, key: &str) -> Option { HashMap::get(self, key).copied() } } #[cfg(feature = "iter")] struct IterContext<'a> { outer: &'a dyn Context, inner: Formattable<'a>, } #[cfg(feature = "iter")] impl<'a> IterContext<'a> { fn new(outer: &'a impl Context, inner: Formattable<'a>) -> Self { Self { outer, inner } } } #[cfg(feature = "iter")] impl<'a> Context for IterContext<'a> { fn get(&self, key: &str) -> Option { if key.is_empty() { Some(self.inner) } else { self.outer.get(key) } } } /// Runtime version of [`write!`]. /// /// Takes a mutable [`Write`] e.g. `&mut String`, a format string and a context, /// containing [`Formattable`] values. /// /// ``` /// # use std::collections::HashMap; /// use interpolator::{write, Formattable}; /// /// let mut buf = String::new(); /// write( /// &mut buf, /// "{value:+05}", // could be dynamic /// &[("value", Formattable::display(&12))] /// .into_iter() /// .collect::>(), /// ) /// .unwrap(); /// /// assert_eq!(buf, format!("{:+05}", 12)); /// ``` /// /// # Errors /// /// It will return an error if the specified format string has invalid syntax, /// the type doesn't implement the expected trait, or the formatting itself /// failed. /// /// For more details have a look at [`Error`] and [`ParseError`]. pub fn write(out: &mut impl Write, mut format: &str, context: &impl Context) -> Result { let format = &mut format; let idx = &mut 0; while !format.is_empty() { if format.starts_with("{{") || format.starts_with("}}") { out.write_str(&format[..1]) .map_err(|e| Error::Fmt(e, *idx))?; step(2, format, idx); continue; } if format.starts_with('{') { step(1, format, idx); let start = *idx; let FormatArgument { ident, alignment, sign, hash, zero, width, precision, trait_, } = FormatArgument::from_str(format, idx)?; let value = context .get(ident) .ok_or(Error::MissingValue(ident.to_string(), start))?; format_value( out, value.borrow(), width, precision, alignment, sign, hash, zero, trait_, *idx, context, )?; ensure!(format.starts_with('}'), ParseError::Expected("}", *idx)); step(1, format, idx); continue; } let next = format .chars() .next() .expect("should contain a char if not empty"); out.write_char(next).map_err(|e| Error::Fmt(e, *idx))?; step(next.len_utf8(), format, idx); } Ok(()) } interpolator-0.5.0/src/macros.rs000064400000000000000000000411431046102023000147740ustar 00000000000000#[cfg(doc)] use crate::{format, write}; /// [`format()`] as a macro to allow specifying the context /// directly. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use interpolator::iformat; /// /// assert_eq!( /// iformat!("{a}, {b:?}", a = 10, b:? = "test").unwrap(), /// "10, \"test\"" /// ) /// ``` #[macro_export] macro_rules! iformat { ($fmt:expr, $($context:tt)*) => { $crate::format($fmt, &$crate::context!($($context)*)) }; } /// [`write()`] as a macro to allow specifying the context /// directly. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use std::fmt::Write; /// use interpolator::iwrite; /// /// let mut buf = String::new(); /// iwrite!(&mut buf, "{a}, {b:?}", a = 10, b:? = "test").unwrap(); /// /// assert_eq!( buf, "10, \"test\"" ); /// ``` #[macro_export] macro_rules! iwrite { ($buf: expr, $fmt:expr, $($context:tt)*) => { $crate::write($buf, $fmt, &$crate::context!($($context)*)) }; } /// Like [`writeln!`] but using [`write()`]. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use std::fmt::Write; /// use interpolator::iwriteln; /// /// let mut buf = String::new(); /// iwriteln!(&mut buf, "{a}, {b:?}", a = 10, b:? = "test").unwrap(); /// /// assert_eq!( buf, "10, \"test\"\n" ); /// ``` #[macro_export] macro_rules! iwriteln { ($buf: expr, $($fmt:tt)*) => { match $crate::iwrite!($buf, $($fmt)*) { // Cannot think of a better error index Ok(()) => std::write!($buf, "\n").map_err(|e| $crate::Error::Fmt(e, 0)), e => e } }; } /// [`print!`] but using [`iformat!`]. /// /// Currently this allocates the complete formatted string. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use interpolator::iprint; /// iprint!("{a}, {b:?}", a = 10, b:? = "test").unwrap(); /// ``` #[macro_export] macro_rules! iprint { ($($fmt:tt)*) => { $crate::iformat!($($fmt)*).map(|f| std::print!("{f}")) }; } /// [`println!`] but using [`iformat!`]. /// /// Currently this allocates the complete formatted string. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use interpolator::iprintln; /// iprintln!("{a}, {b:?}", a = 10, b:? = "test").unwrap(); /// ``` #[macro_export] macro_rules! iprintln { ($($fmt:tt)*) => { $crate::iformat!($($fmt)*).map(|f| std::println!("{f}")) }; } /// [`eprint!`] but using [`iformat!`]. /// /// Currently this allocates the complete formatted string. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use interpolator::ieprint; /// ieprint!("{a}, {b:?}", a = 10, b:? = "test").unwrap(); /// ``` #[macro_export] macro_rules! ieprint { ($($fmt:tt)*) => { $crate::iformat!($($fmt)*).map(|f| std::eprint!("{f}")) }; } /// [`eprintln!`] but using [`iformat!`]. /// /// Currently this allocates the complete formatted string. /// /// For details on the context syntax see [`context!`](crate::context). /// /// ``` /// use interpolator::ieprintln; /// ieprintln!("{a}, {b:?}", a = 10, b:? = "test").unwrap(); /// ``` #[macro_export] macro_rules! ieprintln { ($($fmt:tt)*) => { $crate::iformat!($($fmt)*).map(|f| std::eprintln!("{f}")) }; } /// Creates a context for use with this crate's [`format()`] and [`write()`] /// functions. /// /// It takes a comma seperated list of idents, followed by optional format /// specifiers and an optional value. /// /// - `a` => key = `"a"`, value = `a`, traits = `[Display]` /// - `a:?` => key = `"a"`, value = `a`, traits = `[Debug]` /// - `a: :?` => key = `"a"`, value = `a`, traits = `[Debug, Display]` /// - `a = 5` => key = `"a"`, value = `5`, traits = `[Display]` /// - `a:?:x = 5` => key = `"a"`, value = `5`, traits = `[Debug, LowerHex]` /// /// ``` /// use interpolator::context; /// /// let a = "hello"; /// let context = context! { /// a, /// a:?, // This does not override the display implementation, only debug /// a: :?, // This overrides both display and debug /// a = 5, // Only overrides display /// a:?:x = 5, // Sets debug and lower hex implementation /// }; /// ``` /// /// Due to borrow rules you might need to create let bindings for the values, /// i.e. /// /// ``` /// # use interpolator::context; /// let test = String::from("test"); /// let context = context!(test); /// ``` /// /// instead of /// /// ```compile_fail /// # use interpolator::context; /// let context = context!(test = String::from("test")); /// ``` #[macro_export] macro_rules! context { ($($tts:tt)*) => { { #[allow(unused)] let mut map = ::std::collections::HashMap::<&str, $crate::Formattable>::new(); $crate::inner_context!(map; $($tts)*); map } }; } /// Creates a list of formattable values, applying th specified traits, or /// display if without a trait specifier. /// ``` /// # use assert_dbg::assert_dbg; /// use interpolator::{iformat, list}; /// // a list implementing Display /// let list = list![: ;"test", 10, "another"]; /// # assert_dbg!(list, "[Formattable(display), Formattable(display), Formattable(display)]"); /// let list = list![;"test", 10, "another"]; /// # assert_dbg!(list, "[Formattable(display), Formattable(display), Formattable(display)]"); /// let list = list!["test", 10, "another"]; /// assert_eq!( /// iformat!("{list:i({})(, )}", list:i).unwrap(), /// "test, 10, another" /// ); /// // a list implementing Display, Debug and UpperHex /// let list = list![: :?:X; 4, 0x10, 0xa4]; /// assert_eq!( /// iformat!("{list:i({} {:?} {:X})(, )}", list:i).unwrap(), /// "4 4 4, 16 16 10, 164 164 A4" /// ); /// ``` /// /// Due to borrow rules you might need to create let bindings for the items, /// i.e. /// /// ``` /// # use interpolator::list; /// let test = String::from("test"); /// let list = list![test]; /// ``` /// /// instead of /// /// ```compile_fail /// # use interpolator::list; /// let list = list![String::from("test")]; /// ``` #[macro_export] #[cfg(doc)] macro_rules! list { ($($(: $($trait:tt)?)*;)?($values:expr), *) => {}; } #[cfg(not(doc))] #[allow(missing_docs)] #[macro_export] macro_rules! list { ($($traits:ident),* : ; $($values:tt)*) => { $crate::list!($($traits,)* display; $($values)*) }; ($($traits:ident),* :: $($values:tt)*) => { $crate::list!($($traits,)* display : $($values)*) }; ($($traits:ident),* : : $($values:tt)*) => { $crate::list!($($traits,)* display : $($values)*) }; ($($traits:ident),* : ? $($values:tt)*) => { $crate::list!($($traits,)* debug $($values)*) }; ($($traits:ident),* : $trait:ident $($values:tt)*) => { $crate::list!($($traits,)* $trait $($values)*) }; ($(;)? $($value:expr),* $(,)?) => { $crate::list!(:; $($value),*) }; ($($traits:ident),*; $($value:expr),*) => { $crate::apply!([], ($($traits)*), $($value),*) }; } #[doc(hidden)] #[macro_export] macro_rules! apply { ($previous:tt, ($($traits:tt)*),) => { $previous }; ([$($previous:tt),*], ($($traits:tt)*), $value:expr $(, $($values:expr),*)?) => { $crate::apply!( [ $($previous,)* { #[allow(unused)] let mut value = $crate::Formattable::default(); $($crate::set_trait!(value, $traits, $value);)* value }], ($($traits)*), $($($values),*)?) }; } #[macro_export] #[doc(hidden)] macro_rules! inner_context { ($map:ident; $ident:ident$(:)? $(, $($tts:tt)*)?) => { $crate::inner_context!($map, $ident, display; , $($($tts)*)?); $crate::inner_context!($map; $($($tts)*)?) }; ($map:ident; $ident:ident$(:)? = $($tts:tt)*) => { $crate::inner_context!($map, $ident, display; = $($tts)*); }; ($map:ident; $ident:ident : $($tts:tt)*) => { $crate::inner_context!($map, $ident; : $($tts)*) }; ($map:ident; $ident:ident :: $($tts:tt)*) => { $crate::inner_context!($map, $ident; :: $($tts)*) }; ($map:ident, $ident:ident$(, $traits:tt)*; :: $($tts:tt)*) => { $crate::inner_context!($map, $ident$(, $traits)*, display; : $($tts)*) }; ($map:ident, $ident:ident$(, $traits:tt)*; : : $($tts:tt)*) => { $crate::inner_context!($map, $ident$(, $traits)*, display; : $($tts)*) }; ($map:ident, $ident:ident$(, $traits:tt)*; : = $($tts:tt)*) => { $crate::inner_context!($map, $ident$(, $traits)*, display; => $($tts)*) }; ($map:ident, $ident:ident$(, $traits:tt)*; : $(, $($tts:tt)*)?) => { $crate::inner_context!($map, $ident$(, $traits)*, display; $(, $($tts)*)?) }; ($map:ident, $ident:ident$(, $traits:tt)*; :? $($tts:tt)*) => { $crate::inner_context!($map, $ident$(, $traits)*, ?; $($tts)*) }; ($map:ident, $ident:ident$(, $traits:tt)*; : $trait:ident $($tts:tt)*) => { $crate::inner_context!($map, $ident$(, $traits)*, $trait; $($tts)*) }; ($map:ident, $ident:ident$(, $traits:tt)*; $(, $($tts:tt)*)?) => { $crate::inner_context!($map, $ident$(, $traits)*; = $ident, $($($tts)*)?) }; ($map:ident, $ident:ident$(, $traits:tt)*; = $value:expr $(, $($tts:tt)*)?) => { $($crate::set_trait!($map.entry(stringify!($ident)).or_default(), $traits, $value);)* $crate::inner_context!($map; $($($tts)*)?) }; ($map:ident;) => {}; } /// Sets the corresponding trait to the symbol on a formattable. #[doc(hidden)] #[macro_export] macro_rules! set_trait { ($formattable:expr, ? , $value:expr) => { $crate::set_trait!($formattable, set_debug, $value); }; ($formattable:expr,debug, $value:expr) => { $crate::set_trait!($formattable, set_debug, $value); }; ($formattable:expr, , $value:expr) => { $crate::set_trait!($formattable, set_display, $value); }; ($formattable:expr,display, $value:expr) => { $crate::set_trait!($formattable, set_display, $value); }; ($formattable:expr,integer, $value:expr) => { $crate::set_trait!($formattable, set_integer, $value); }; ($formattable:expr,float, $value:expr) => { $crate::set_trait!($formattable, set_float, $value); }; ($formattable:expr,b, $value:expr) => { $crate::set_trait!($formattable, set_binary, $value); }; ($formattable:expr,binary, $value:expr) => { $crate::set_trait!($formattable, set_binary, $value); }; ($formattable:expr,e, $value:expr) => { $crate::set_trait!($formattable, set_lower_exp, $value); }; ($formattable:expr,lower_exp, $value:expr) => { $crate::set_trait!($formattable, set_lower_exp, $value); }; ($formattable:expr,x, $value:expr) => { $crate::set_trait!($formattable, set_lower_hex, $value); }; ($formattable:expr,lower_hex, $value:expr) => { $crate::set_trait!($formattable, set_lower_hex, $value); }; ($formattable:expr,o, $value:expr) => { $crate::set_trait!($formattable, set_octal, $value); }; ($formattable:expr,octal, $value:expr) => { $crate::set_trait!($formattable, set_octal, $value); }; ($formattable:expr,E, $value:expr) => { $crate::set_trait!($formattable, set_upper_exp, $value); }; ($formattable:expr,upper_exp, $value:expr) => { $crate::set_trait!($formattable, set_upper_exp, $value); }; ($formattable:expr,X, $value:expr) => { $crate::set_trait!($formattable, set_upper_hex, $value); }; ($formattable:expr,upper_hex, $value:expr) => { $crate::set_trait!($formattable, set_upper_hex, $value); }; ($formattable:expr,p, $value:expr) => { $crate::set_trait!($formattable, set_pointer, $value); }; ($formattable:expr,pointer, $value:expr) => { $crate::set_trait!($formattable, set_pointer, $value); }; ($formattable:expr,i, $value:expr) => { $crate::set_trait!($formattable, set_iter, $value); }; ($formattable:expr,iter, $value:expr) => { $crate::set_trait!($formattable, set_iter, $value); }; ($formattable:expr, $setter:ident, $value:expr) => { $formattable.$setter(&$value); }; } #[cfg(test)] mod test { #[allow(unused)] use std::f32::consts::PI; #[allow(unused)] macro_rules! assert_fmt { ($fmt:tt, $context:tt. $($fn:tt),+($key:tt), $expected:tt) => { assert_eq!( format!( $fmt, $($context.get(stringify!($key)).unwrap().$fn().unwrap()),+), $expected ); }; } #[test] #[cfg(all(feature = "debug", feature = "number", feature = "pointer"))] fn context() { let pointer = &32; let context = context! { a = "", a:? = "", b:?:b = 10, d: :? = "hello", }; assert_fmt!("{}", context.get_display(a), ""); assert_fmt!("{:?}", context.get_debug(a), "\"\""); assert_fmt!("{:?}", context.get_debug(b), "10"); assert_fmt!("{:b}", context.get_binary(b), "1010"); assert_fmt!("{:}", context.get_display(d), "hello"); assert_fmt!("{:?}", context.get_debug(d), "\"hello\""); let context = context! { debug1:? = "debug", debug2:debug = "debug", display1 = "display", display2: = "display", display3:display = "display", integer:integer = 42, float:float = PI, binary1:b = 12, binary2:binary = 12, lower_exp1:e = 0.01, lower_exp2:lower_exp = 0.01, lower_hex1:x = 0xA9, lower_hex2:lower_hex = 0xA9, octal1:o = 0o20, octal2:octal = 0o20, upper_exp1:E = 0.01, upper_exp2:upper_exp = 0.01, upper_hex1:X = 0xA9, upper_hex2:upper_hex = 0xA9, pointer1:p = pointer, pointer2:pointer = pointer, // iter:i:? = [1, 2], }; assert_fmt!("{}", context.get_display(display1), "display"); assert_fmt!("{}", context.get_display(display2), "display"); assert_fmt!("{}", context.get_display(display3), "display"); assert_fmt!("{:?}", context.get_debug(debug1), "\"debug\""); assert_fmt!("{:?}", context.get_debug(debug2), "\"debug\""); assert_fmt!( "{:b} {:?} {:} {:e} {:x} {:o} {:E} {:X}", context.get_binary, get_debug, get_display, get_lower_exp, get_lower_hex, get_octal, get_upper_exp, get_upper_hex(integer), "101010 42 42 4.2e1 2a 52 4.2E1 2A" ); assert_fmt!( "{:?} {:} {:e} {:E}", context.get_debug, get_display, get_lower_exp, get_upper_exp(float), "3.1415927 3.1415927 3.1415927e0 3.1415927E0" ); assert_fmt!("{:b}", context.get_binary(binary1), "1100"); assert_fmt!("{:b}", context.get_binary(binary2), "1100"); assert_fmt!("{:e}", context.get_lower_exp(lower_exp1), "1e-2"); assert_fmt!("{:e}", context.get_lower_exp(lower_exp2), "1e-2"); assert_fmt!("{:x}", context.get_lower_hex(lower_hex1), "a9"); assert_fmt!("{:x}", context.get_lower_hex(lower_hex2), "a9"); assert_fmt!("{:o}", context.get_octal(octal1), "20"); assert_fmt!("{:o}", context.get_octal(octal2), "20"); assert_fmt!("{:E}", context.get_upper_exp(upper_exp1), "1E-2"); assert_fmt!("{:E}", context.get_upper_exp(upper_exp2), "1E-2"); assert_fmt!("{:X}", context.get_upper_hex(upper_hex1), "A9"); assert_fmt!("{:X}", context.get_upper_hex(upper_hex2), "A9"); assert_fmt!( "{:p}", context.get_pointer(pointer1), (format!("{pointer:p}")) ); assert_fmt!( "{:p}", context.get_pointer(pointer2), (format!("{pointer:p}")) ); } #[allow(unused)] macro_rules! assert_i { ($fmt:literal, $variable:ident, $rhs:literal) => { assert_eq!( iformat!(concat!("{list:i(", $fmt, ")(,)}"), $variable: i).unwrap(), $rhs ); }; } #[test] #[cfg(feature = "iter")] fn list() { let list = list!["a", 1]; assert_i!("{}", list, "a,1"); #[cfg(feature = "debug")] { let list = list![:?; "a", 1]; assert_i!("{:?}", list, "\"a\",1"); #[cfg(feature = "number")] { let list = list![::?:X; 2, 1]; assert_i!("{}{:?}{:X}", list, "222,111"); } } } } interpolator-0.5.0/src/parser.rs000064400000000000000000000301151046102023000150010ustar 00000000000000use std::convert::Infallible; use std::str::FromStr; use super::*; fn alignment(c: u8) -> Option { match c { b'<' => Some(Alignment::Left), b'^' => Some(Alignment::Center), b'>' => Some(Alignment::Right), _ => None, } } #[derive(Debug, Default, PartialEq, Eq, Clone, Copy)] pub(crate) enum Alignment { Left, Center, Right, #[default] None, } #[derive(Debug, Default, PartialEq, Eq)] pub(crate) enum Sign { Plus, Minus, #[default] None, } #[derive(Debug, Default, Clone, Copy)] #[allow(non_camel_case_types)] pub(crate) enum TraitSpec<'a> { #[default] Display, #[cfg(feature = "debug")] Question, #[cfg(feature = "debug")] LowerHexQuestion, #[cfg(feature = "debug")] UpperHexQuestion, #[cfg(feature = "number")] LowerHex, #[cfg(feature = "number")] UpperHex, #[cfg(feature = "number")] Binary, #[cfg(feature = "number")] Octal, #[cfg(feature = "number")] LowerExp, #[cfg(feature = "number")] UpperExp, #[cfg(feature = "pointer")] Pointer, #[cfg(feature = "iter")] Iter(Option, Option<&'a str>, Option<&'a str>), #[allow(unused)] Phantom(&'a Infallible), } fn parse_number>( format: &mut &str, idx: &mut usize, start: usize, error: fn(::Err, usize) -> IE, ) -> Result { let len = format .find(|c: char| c != '-' && !c.is_ascii_digit()) .ok_or(ParseError::FormatSpecUnclosed(start))?; let i = format[..len].parse().map_err(|e| error(e, *idx).into())?; step(len, format, idx); Ok(i) } #[derive(Debug, Default, Clone, Copy)] pub(crate) struct Range( pub(crate) Option, pub(crate) bool, pub(crate) Option, ); impl<'a> TraitSpec<'a> { #[allow(clippy::too_many_lines, unused_variables)] fn from_str(format: &mut &'a str, idx: &mut usize, start: usize) -> Result { if format.starts_with('}') { return Ok(Self::Display); } match format.as_bytes()[0] { #[cfg(feature = "debug")] b'?' => Ok(TraitSpec::Question), #[cfg(not(feature = "debug"))] b'?' => Err(Error::UnsupportedOption("?", "debug", *idx)), #[cfg(feature = "debug")] b'x' if format.as_bytes()[1] == b'?' => { step(1, format, idx); Ok(TraitSpec::LowerHexQuestion) } #[cfg(not(feature = "debug"))] b'x' if format.as_bytes()[1] == b'?' => { Err(Error::UnsupportedOption("x?", "debug", *idx)) } #[cfg(feature = "debug")] b'X' if format.as_bytes()[1] == b'?' => { step(1, format, idx); Ok(TraitSpec::UpperHexQuestion) } #[cfg(not(feature = "debug"))] b'X' if format.as_bytes()[1] == b'?' => { Err(Error::UnsupportedOption("X?", "debug", *idx)) } #[cfg(feature = "number")] b'o' => Ok(TraitSpec::Octal), #[cfg(not(feature = "number"))] b'o' => Err(Error::UnsupportedOption("o", "number", *idx)), #[cfg(feature = "number")] b'x' => Ok(TraitSpec::LowerHex), #[cfg(not(feature = "number"))] b'x' => Err(Error::UnsupportedOption("x", "number", *idx)), #[cfg(feature = "number")] b'X' => Ok(TraitSpec::UpperHex), #[cfg(not(feature = "number"))] b'X' => Err(Error::UnsupportedOption("X", "number", *idx)), #[cfg(feature = "number")] b'b' => Ok(TraitSpec::Binary), #[cfg(not(feature = "number"))] b'b' => Err(Error::UnsupportedOption("b", "number", *idx)), #[cfg(feature = "number")] b'e' => Ok(TraitSpec::LowerExp), #[cfg(not(feature = "number"))] b'e' => Err(Error::UnsupportedOption("e", "number", *idx)), #[cfg(feature = "number")] b'E' => Ok(TraitSpec::UpperExp), #[cfg(not(feature = "number"))] b'E' => Err(Error::UnsupportedOption("E", "number", *idx)), #[cfg(feature = "pointer")] b'p' => Ok(TraitSpec::Pointer), #[cfg(not(feature = "pointer"))] b'p' => Err(Error::UnsupportedOption("p", "pointer", *idx)), #[cfg(feature = "iter")] b'i' => { step(1, format, idx); return Ok(TraitSpec::Iter( if format.starts_with('-') || format.starts_with("..") || format.starts_with(|c: char| c.is_ascii_digit()) { let lhs = if format.starts_with("..") { None } else { Some(parse_number(format, idx, start, ParseError::RangeBound)?) }; let inclusive; let rhs; if format.starts_with("..") { step(2, format, idx); inclusive = format.starts_with('='); if inclusive { step(1, format, idx); } rhs = if format.starts_with('-') || format.starts_with(|c: char| c.is_ascii_digit()) { Some(parse_number(format, idx, start, ParseError::RangeBound)?) } else { None } } else { inclusive = true; rhs = lhs; } Some(Range(lhs, inclusive, rhs)) } else { None }, if format.starts_with('(') || format.starts_with('#') { Some(collect_parenthesized(format, idx, start)?) } else { None }, if format.starts_with('(') || format.starts_with('#') { Some(collect_parenthesized(format, idx, start)?) } else { None }, )); } #[cfg(not(feature = "iter"))] b'i' => Err(Error::UnsupportedOption("i", "iter", *idx)), _ => Err(ParseError::Expected("}", *idx).into()), } .map(|m| { step(1, format, idx); m }) } } #[cfg(feature = "iter")] fn collect_parenthesized<'a>( format: &mut &'a str, idx: &mut usize, outer_start: usize, ) -> Result<&'a str> { let pounds = format .find(|c| c != '#') .ok_or(ParseError::FormatSpecUnclosed(outer_start))?; step(pounds, format, idx); ensure! {format.starts_with('('), ParseError::Expected("(", *idx)}; step(1, format, idx); let start = *idx; let inner = *format; loop { if format.starts_with(')') && format.len() > pounds && format[1..].chars().take(pounds).all(|c| c == '#') { step(1 + pounds, format, idx); break; } step( format .chars() .next() .ok_or(ParseError::FormatSpecUnclosed(outer_start))? // TODO correct index .len_utf8(), format, idx, ); } Ok(&inner[..*idx - start - 1 - pounds]) } #[derive(Default, Debug)] pub(crate) struct FormatArgument<'a> { pub(crate) ident: &'a str, pub(crate) alignment: Alignment, pub(crate) sign: Sign, pub(crate) hash: bool, pub(crate) zero: bool, pub(crate) width: Option, pub(crate) precision: Option, pub(crate) trait_: TraitSpec<'a>, } pub(crate) fn step(len: usize, format: &mut &str, idx: &mut usize) { *format = &format[len..]; *idx += len; } impl<'a> FormatArgument<'a> { pub(crate) fn from_str(format: &mut &'a str, idx: &mut usize) -> Result { let start_index = *idx; let mut it = Self::default(); step( format.find(|c: char| !c.is_whitespace()).unwrap_or(0), format, idx, ); let variable_len = format .find(|c| c == ':' || c == '}') .ok_or(ParseError::FormatSpecUnclosed(start_index))?; it.ident = &format[..variable_len]; step(variable_len, format, idx); if format.starts_with(':') { step(1, format, idx); if format.is_empty() { return Ok(it); } let fill = format .chars() .next() .ok_or(ParseError::Expected("}", *idx))?; if format[fill.len_utf8()..].is_empty() { return Ok(it); } if alignment(format[fill.len_utf8()..].as_bytes()[0]).is_some() { return Err(ParseError::Fill(*idx).into()); } else if fill.is_ascii() { if let Some(alignment) = alignment(fill as u8) { it.alignment = alignment; step(1, format, idx); } } if format.is_empty() { return Ok(it); } match format.as_bytes()[0] { b'+' => { step(1, format, idx); it.sign = Sign::Plus; } b'-' => { step(1, format, idx); it.sign = Sign::Minus; } _ => {} } if format.is_empty() { return Ok(it); } if b'#' == format.as_bytes()[0] { step(1, format, idx); it.hash = true; } if format.starts_with('0') { it.zero = true; step(1, format, idx); } if format.starts_with(|c: char| c.is_ascii_digit()) { it.width = Some(parse_number( format, idx, start_index, ParseError::InvalidWidth, )?); } if format.starts_with('.') { step(1, format, idx); it.precision = Some(parse_number( format, idx, start_index, ParseError::InvalidPrecision, )?); } it.trait_ = TraitSpec::from_str(format, idx, start_index)?; } Ok(it) } } #[cfg(test)] #[cfg(feature = "iter")] mod test { use super::*; #[test] fn collect_parenthesized() { use super::collect_parenthesized; let mut idx = 0; let mut format = "()"; assert_eq!(collect_parenthesized(&mut format, &mut idx, 0).unwrap(), ""); assert_eq!(idx, 2); assert_eq!(format, ""); let mut idx = 0; let mut format = "#(a)))# hello"; assert_eq!( collect_parenthesized(&mut format, &mut idx, 0).unwrap(), "a))" ); assert_eq!(idx, 7); assert_eq!(format, " hello"); let mut idx = 0; let mut format = "###((a:)#>))##))###)### hello"; assert_eq!( collect_parenthesized(&mut format, &mut idx, 0).unwrap(), "(a:)#>))##)" ); assert_eq!(idx, 19); assert_eq!(format, ")### hello"); assert_eq!( collect_parenthesized(&mut "###()##", &mut 0, 10).unwrap_err(), Error::Parse(ParseError::FormatSpecUnclosed(10)) ); assert_eq!( collect_parenthesized(&mut "###", &mut 0, 10).unwrap_err(), Error::Parse(ParseError::FormatSpecUnclosed(10)) ); assert_eq!( collect_parenthesized(&mut "###a", &mut 0, 10).unwrap_err(), Error::Parse(ParseError::Expected("(", 3)) ); } }