mirror of
https://github.com/ostreedev/ostree.git
synced 2025-01-09 01:18:35 +03:00
Replace the radix64 crate with base64
The radix64 crate was last updated over 3 years ago. On the other hand the base64 crate appears to be far more actively maintained, supports all the needed features and has a few orders of magnitude more users.
This commit is contained in:
parent
2d4ee168d7
commit
b4667c1b31
@ -38,6 +38,7 @@ path = "rust-bindings/tests/tests.rs"
|
||||
members = [".", "rust-bindings/sys"]
|
||||
|
||||
[dependencies]
|
||||
base64 = "0.20.0"
|
||||
bitflags = "1.2.1"
|
||||
cap-std = { version = "1.0", optional = true}
|
||||
io-lifetimes = { version = "1.0", optional = true}
|
||||
@ -47,7 +48,6 @@ glib = "0.16"
|
||||
hex = "0.4.2"
|
||||
libc = "0.2"
|
||||
once_cell = "1.4.0"
|
||||
radix64 = "0.6.2"
|
||||
thiserror = "1.0.20"
|
||||
|
||||
[dev-dependencies]
|
||||
|
@ -1,23 +1,28 @@
|
||||
use base64::{
|
||||
alphabet::Alphabet,
|
||||
engine::fast_portable::{FastPortable, FastPortableConfig},
|
||||
engine::DecodePaddingMode,
|
||||
};
|
||||
use glib::ffi::{g_free, g_malloc0, gpointer};
|
||||
use glib::translate::{FromGlibPtrFull, FromGlibPtrNone};
|
||||
use once_cell::sync::OnceCell;
|
||||
use once_cell::sync::Lazy;
|
||||
use std::ptr::copy_nonoverlapping;
|
||||
|
||||
const BYTES_LEN: usize = ffi::OSTREE_SHA256_DIGEST_LEN as usize;
|
||||
|
||||
static BASE64_CONFIG: OnceCell<radix64::CustomConfig> = OnceCell::new();
|
||||
static BASE64_ENGINE: Lazy<FastPortable> = Lazy::new(|| {
|
||||
// modified base64 alphabet used by ostree (uses _ instead of /)
|
||||
let alphabet =
|
||||
Alphabet::from_str("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_")
|
||||
.expect("bad base64 alphabet");
|
||||
|
||||
fn base64_config() -> &'static radix64::CustomConfig {
|
||||
BASE64_CONFIG.get_or_init(|| {
|
||||
radix64::configs::CustomConfigBuilder::with_alphabet(
|
||||
// modified base64 alphabet used by ostree (uses _ instead of /)
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_",
|
||||
)
|
||||
.no_padding()
|
||||
.build()
|
||||
.unwrap()
|
||||
})
|
||||
}
|
||||
FastPortable::from(
|
||||
&alphabet,
|
||||
FastPortableConfig::new()
|
||||
.with_encode_padding(false)
|
||||
.with_decode_padding_mode(DecodePaddingMode::Indifferent),
|
||||
)
|
||||
});
|
||||
|
||||
/// Error returned from parsing a checksum.
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
@ -61,7 +66,7 @@ impl Checksum {
|
||||
/// Create a `Checksum` from a base64-encoded String.
|
||||
pub fn from_base64(b64_checksum: &str) -> Result<Checksum, ChecksumError> {
|
||||
let mut checksum = Checksum::zeroed();
|
||||
match base64_config().decode_slice(b64_checksum, checksum.as_mut()) {
|
||||
match base64::decode_engine_slice(b64_checksum, checksum.as_mut(), &*BASE64_ENGINE) {
|
||||
Ok(BYTES_LEN) => Ok(checksum),
|
||||
Ok(_) => Err(ChecksumError::InvalidBase64String),
|
||||
Err(_) => Err(ChecksumError::InvalidBase64String),
|
||||
@ -75,7 +80,7 @@ impl Checksum {
|
||||
|
||||
/// Convert checksum to base64 string.
|
||||
pub fn to_base64(&self) -> String {
|
||||
base64_config().encode(self.as_slice())
|
||||
base64::encode_engine(self.as_slice(), &*BASE64_ENGINE)
|
||||
}
|
||||
|
||||
/// Create a `Checksum` value, taking ownership of the given memory location.
|
||||
|
Loading…
Reference in New Issue
Block a user