endian::ToBytes,
format::{Category, DateTemplate, Decimal, Format, NumberStyle, Settings, TemplateItem, Type},
settings::{EndianSettings, Settings as PsppSettings},
+ util::ToSmallString,
};
pub struct DisplayDatum<'b, B> {
match self.decimal {
'.' => write!(f, "{}", Inner(self.value)),
_ => {
- let mut tmp = SmallString::<[u8; 64]>::new();
- write!(&mut tmp, "{}", Inner(self.value)).unwrap();
+ let tmp = Inner(self.value).to_small_string::<64>();
if let Some(position) = tmp.find('.') {
f.write_str(&tmp[..position])?;
f.write_char(self.decimal)?;
if len > w {
self.overflow(f)
} else {
- let mut s = SmallString::<[u8; 40]>::new();
- write!(&mut s, "{legacy}")?;
+ let mut s = legacy.to_small_string::<40>();
if number < 0.0 {
if let Some(last) = s.pop() {
let last = last.to_digit(10).unwrap();
None if encoding == UTF_8 => {
write!(&mut w, "{}", self)
}
- None => {
- let mut temp = SmallString::<[u8; 64]>::new();
- write!(&mut temp, "{}", self).unwrap();
- w.write_all(&encoding.encode(&temp).0)
- }
+ None => w.write_all(&encoding.encode(&self.to_small_string::<64>()).0),
}
}
use enum_iterator::{all, Sequence};
use enum_map::{Enum, EnumMap};
use serde::{Deserialize, Serialize};
-use smallstr::SmallString;
use thiserror::Error as ThisError;
use unicode_width::UnicodeWidthStr;
use crate::{
data::{ByteString, Datum},
sys::raw,
+ util::ToSmallString,
variable::{VarType, VarWidth},
};
where
S: serde::Serializer,
{
- let mut s = SmallString::<[u8; 16]>::new();
- write!(&mut s, "{}", self).unwrap();
- s.serialize(serializer)
+ self.to_small_string::<16>().serialize(serializer)
}
}
pub mod prompt;
pub mod settings;
pub mod sys;
+pub mod util;
pub mod variable;
/// This is [slice::element_offset] copied out from the standard library so that
data::{ByteString, Datum, EncodedString, RawString},
format::{Decimal, Format, Settings as FormatSettings, Type, UncheckedFormat},
settings::{Settings, Show},
+ util::ToSmallString,
variable::{VarType, Variable},
};
where
S: serde::Serializer,
{
- let mut s = SmallString::<[u8; 16]>::new();
- write!(&mut s, "{}", self).unwrap();
- serializer.serialize_str(&s)
+ serializer.serialize_str(&self.to_small_string::<16>())
}
}
where
S: serde::Serializer,
{
- let mut s = SmallString::<[u8; 32]>::new();
- write!(&mut s, "{}", self).unwrap();
- serializer.serialize_str(&s)
+ serializer.serialize_str(&self.to_small_string::<32>())
}
}
where
S: serde::Serializer,
{
- let mut s = SmallString::<[u8; 32]>::new();
- write!(&mut s, "{}", self.display_css()).unwrap();
- serializer.serialize_str(&s)
+ serializer.serialize_str(&self.display_css().to_small_string::<32>())
}
}
use core::f64;
use std::{
borrow::Cow,
- fmt::Write as _,
fs::File,
io::{Cursor, Seek, Write},
iter::{repeat, repeat_n},
ElementWriter,
};
use serde::{Deserialize, Serialize};
-use smallstr::SmallString;
use zip::{result::ZipResult, write::SimpleFileOptions, ZipWriter};
use crate::{
Item, Text,
},
settings::Show,
+ util::ToSmallString,
};
fn light_table_name(table_id: u64) -> String {
endian: Endian,
args: Self::Args<'_>,
) -> binrw::BinResult<()> {
- let mut s = SmallString::<[u8; 16]>::new();
- write!(&mut s, "{}", self.without_alpha().display_css()).unwrap();
- SpvString(&s).write_options(writer, endian, args)
+ SpvString(&self.without_alpha().display_css().to_small_string::<16>())
+ .write_options(writer, endian, args)
}
}
--- /dev/null
+use std::fmt::{Display, Write};
+
+use smallstr::SmallString;
+
+pub trait ToSmallString {
+ fn to_small_string<const N: usize>(&self) -> SmallString<[u8; N]>;
+}
+
+impl<T> ToSmallString for T
+where
+ T: Display,
+{
+ fn to_small_string<const N: usize>(&self) -> SmallString<[u8; N]> {
+ let mut s = SmallString::new();
+ write!(&mut s, "{}", self).unwrap();
+ s
+ }
+}