From a32eeae202f00488ccb60ea367aecc05f85b1e36 Mon Sep 17 00:00:00 2001 From: Arthur Cohen Date: Mon, 26 Feb 2024 11:55:47 +0100 Subject: [PATCH] format-parser: Add `is_some_and` method for Option Workaround for Ubuntu 18.04, since we still use it for the GCC 4.8 CI. The default Rust package is 1.65 (and unlikely to change I assume?), but the generic format parser library uses `is_some_and` which was introduced in 1.70. So this is a simple reimplementation, directly taken from the standard library sources. libgrust/ChangeLog: * libformat_parser/generic_format_parser/src/lib.rs: Add IsSomeAnd trait, impl it for Option. --- .../generic_format_parser/src/lib.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/libgrust/libformat_parser/generic_format_parser/src/lib.rs b/libgrust/libformat_parser/generic_format_parser/src/lib.rs index 6a366177f252..8062bf9e5cec 100644 --- a/libgrust/libformat_parser/generic_format_parser/src/lib.rs +++ b/libgrust/libformat_parser/generic_format_parser/src/lib.rs @@ -22,6 +22,22 @@ fn is_id_continue(c: char) -> bool { unicode_xid::UnicodeXID::is_xid_continue(c) } +// Workaround for Ubuntu 18.04. The default Rust package is 1.65 (and unlikely to change I assume?), but the +// generic format parser library uses `is_some_and` which was introduced in 1.70. So this is a reimplementation, +// directly taken from the standard library sources +trait IsSomeAnd { + fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool; +} + +impl IsSomeAnd for Option { + fn is_some_and(self, f: impl FnOnce(T) -> bool) -> bool { + match self { + None => false, + Some(x) => f(x), + } + } +} + // use rustc_lexer::unescape; pub use Alignment::*; pub use Count::*;