_ => false,
}
}
+
+ pub fn quoted(&self) -> QuotedEncodedDatum<'_> {
+ QuotedEncodedDatum(self.borrowed())
+ }
}
impl<D> EncodedDatum<D> {
Self::String(s) => s.trim_end(),
}
}
-
- pub fn quoted(&self) -> QuotedEncodedDatum<'_> {
- QuotedEncodedDatum(self.borrowed())
- }
}
impl Display for EncodedDatum {
// this program. If not, see <http://www.gnu.org/licenses/>.
use std::{
+ borrow::Borrow,
cmp::min,
fmt::{Display, Error as FmtError, Formatter, Result as FmtResult, Write as _},
io::{Error as IoError, Write as IoWrite},
use crate::{
calendar::{calendar_offset_to_gregorian, day_of_year, month_name, short_month_name},
- data::{EncodedDat, EncodedDatum, QuotedEncodedDatum},
+ data::{
+ BorrowedEncodedDatum, BorrowedRawString, EncodedDat, EncodedDatum, EncodedString,
+ QuotedEncodedDatum,
+ },
endian::{endian_to_smallvec, ToBytes},
format::{Category, DateTemplate, Decimal, Format, NumberStyle, Settings, TemplateItem, Type},
settings::{EndianSettings, Settings as PsppSettings},
format: Format,
settings: &'b Settings,
endian: EndianSettings,
- datum: EncodedDat<'a>,
+ datum: BorrowedEncodedDatum<'a>,
/// If true, the output will remove leading and trailing spaces from numeric
/// values, and trailing spaces from string values. (This might make the
}
}
-impl EncodedDat<'_> {
- /// Returns an object that implements [Display] for printing this
- /// [EncodedDatum] as `format`.
- ///
- /// [Display]: std::fmt::Display
- pub fn display(&self, format: Format) -> DisplayDatum {
- DisplayDatum::new(format, *self)
- }
-
- pub fn display_plain(&self) -> QuotedEncodedDatum<'_> {
- self.quoted()
- }
-}
-
-impl EncodedDatum {
+impl<R> EncodedDatum<EncodedString<R>>
+where
+ R: Borrow<BorrowedRawString>,
+{
/// Returns an object that implements [Display] for printing this
/// [EncodedDatum] as `format`.
///
impl Display for DisplayDatum<'_, '_> {
fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
let number = match self.datum {
- EncodedDat::Number(number) => number,
- EncodedDat::String(string) => {
+ EncodedDatum::Number(number) => number,
+ EncodedDatum::String(string) => {
if self.format.type_() == Type::AHex {
for byte in string.as_bytes() {
write!(f, "{byte:02x}")?;
}
impl<'a, 'b> DisplayDatum<'a, 'b> {
- pub fn new(format: Format, datum: EncodedDat<'a>) -> Self {
+ pub fn new(format: Format, datum: BorrowedEncodedDatum<'a>) -> Self {
let settings = PsppSettings::global();
Self {
format,
use smallvec::SmallVec;
use crate::{
- data::{ EncodedDatum},
+ data::{EncodedDatum, OwnedEncodedDatum},
endian::Endian,
format::{AbstractFormat, Epoch, Format, Settings, Type, UncheckedFormat, CC},
lex::{scan::StringScanner, segment::Syntax, Punct, Token},
let format: Format = format.try_into().unwrap();
assert_eq!(tokens.get(1), Some(&Token::Punct(Punct::Colon)));
let expected = tokens[2].as_string().unwrap();
- let actual = EncodedDatum::Number(value)
+ let actual = OwnedEncodedDatum::Number(value)
.display(format)
.with_settings(&settings)
.with_endian(endian)
assert_eq!(tokens.get(1), Some(&Token::Punct(Punct::Colon)));
let expected = tokens[2].as_string().unwrap();
let mut actual = SmallVec::<[u8; 16]>::new();
- EncodedDatum::Number(value)
+ OwnedEncodedDatum::Number(value)
.display(format)
.with_endian(endian)
.write(&mut actual, UTF_8)
use tlo::parse_tlo;
use crate::{
- data::{BorrowedRawString, Datum, EncodedDat, EncodedDatum, EncodedString, OwnedRawString},
+ data::{
+ BorrowedRawString, Datum, EncodedDat, EncodedDatum, EncodedString, OwnedEncodedDatum,
+ OwnedRawString,
+ },
dictionary::{VarType, Variable},
format::{Decimal, Format, Settings as FormatSettings, Type, UncheckedFormat},
settings::{Settings, Show},
R: Borrow<BorrowedRawString>,
{
match value {
- EncodedDat::Number(number) => Self::new_number(number),
- EncodedDat::String(string) => Self::new_user_text(string.as_str()),
+ EncodedDatum::Number(number) => Self::new_number(*number),
+ EncodedDatum::String(string) => Self::new_user_text(string.as_str()),
}
}
pub fn new_variable_value(variable: &Variable, value: &Datum<OwnedRawString>) -> Self {
*format
};
let mut buf = SmallString::<[u8; 40]>::new();
- write!(&mut buf, "{}", EncodedDat::Number(*value).display(format)).unwrap();
+ write!(
+ &mut buf,
+ "{}",
+ OwnedEncodedDatum::Number(*value).display(format)
+ )
+ .unwrap();
write!(f, "{}", buf.trim_start_matches(' '))?;
}
if let Some(label) = self.show_label {
.push(Value::new_integer(Some((case_numbers.len() + 1) as f64)));
data.push(
case.into_iter()
- .map(|datum| Value::new_datum(datum.borrowed()))
+ .map(|datum| Value::new_datum(&datum))
.collect::<Vec<_>>(),
);
}