qrcode: Rename the main qrcode type
parent
7f364fd615
commit
1c8081533d
|
@ -20,12 +20,12 @@
|
||||||
//! [spec]: https://spec.matrix.org/unstable/client-server-api/#qr-code-format
|
//! [spec]: https://spec.matrix.org/unstable/client-server-api/#qr-code-format
|
||||||
//!
|
//!
|
||||||
//! ```no_run
|
//! ```no_run
|
||||||
//! # use matrix_qrcode::{QrVerification, DecodingError};
|
//! # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
//! # fn main() -> Result<(), DecodingError> {
|
//! # fn main() -> Result<(), DecodingError> {
|
||||||
//! use image;
|
//! use image;
|
||||||
//!
|
//!
|
||||||
//! let image = image::open("/path/to/my/image.png").unwrap();
|
//! let image = image::open("/path/to/my/image.png").unwrap();
|
||||||
//! let result = QrVerification::from_image(image)?;
|
//! let result = QrVerificationData::from_image(image)?;
|
||||||
//! # Ok(())
|
//! # Ok(())
|
||||||
//! # }
|
//! # }
|
||||||
//! ```
|
//! ```
|
||||||
|
@ -55,7 +55,7 @@ pub use qrcode;
|
||||||
#[cfg_attr(feature = "docs", doc(cfg(decode_image)))]
|
#[cfg_attr(feature = "docs", doc(cfg(decode_image)))]
|
||||||
pub use rqrr;
|
pub use rqrr;
|
||||||
pub use types::{
|
pub use types::{
|
||||||
QrVerification, SelfVerificationData, SelfVerificationNoMasterKey, VerificationData,
|
QrVerificationData, SelfVerificationData, SelfVerificationNoMasterKey, VerificationData,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
@ -70,7 +70,7 @@ mod test {
|
||||||
|
|
||||||
#[cfg(feature = "decode_image")]
|
#[cfg(feature = "decode_image")]
|
||||||
use crate::utils::decode_qr;
|
use crate::utils::decode_qr;
|
||||||
use crate::{DecodingError, QrVerification};
|
use crate::{DecodingError, QrVerificationData};
|
||||||
|
|
||||||
#[cfg(feature = "decode_image")]
|
#[cfg(feature = "decode_image")]
|
||||||
static VERIFICATION: &[u8; 4277] = include_bytes!("../data/verification.png");
|
static VERIFICATION: &[u8; 4277] = include_bytes!("../data/verification.png");
|
||||||
|
@ -92,9 +92,9 @@ mod test {
|
||||||
fn decode_test() {
|
fn decode_test() {
|
||||||
let image = Cursor::new(VERIFICATION);
|
let image = Cursor::new(VERIFICATION);
|
||||||
let image = image::load(image, ImageFormat::Png).unwrap().to_luma8();
|
let image = image::load(image, ImageFormat::Png).unwrap().to_luma8();
|
||||||
let result = QrVerification::try_from(image).unwrap();
|
let result = QrVerificationData::try_from(image).unwrap();
|
||||||
|
|
||||||
assert!(matches!(result, QrVerification::Verification(_)));
|
assert!(matches!(result, QrVerificationData::Verification(_)));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -102,18 +102,18 @@ mod test {
|
||||||
fn decode_encode_cycle() {
|
fn decode_encode_cycle() {
|
||||||
let image = Cursor::new(VERIFICATION);
|
let image = Cursor::new(VERIFICATION);
|
||||||
let image = image::load(image, ImageFormat::Png).unwrap();
|
let image = image::load(image, ImageFormat::Png).unwrap();
|
||||||
let result = QrVerification::from_image(image).unwrap();
|
let result = QrVerificationData::from_image(image).unwrap();
|
||||||
|
|
||||||
assert!(matches!(result, QrVerification::Verification(_)));
|
assert!(matches!(result, QrVerificationData::Verification(_)));
|
||||||
|
|
||||||
let encoded = result.to_qr_code().unwrap();
|
let encoded = result.to_qr_code().unwrap();
|
||||||
let image = encoded.render::<Luma<u8>>().build();
|
let image = encoded.render::<Luma<u8>>().build();
|
||||||
let second_result = QrVerification::try_from(image).unwrap();
|
let second_result = QrVerificationData::try_from(image).unwrap();
|
||||||
|
|
||||||
assert_eq!(result, second_result);
|
assert_eq!(result, second_result);
|
||||||
|
|
||||||
let bytes = result.to_bytes().unwrap();
|
let bytes = result.to_bytes().unwrap();
|
||||||
let third_result = QrVerification::from_bytes(bytes).unwrap();
|
let third_result = QrVerificationData::from_bytes(bytes).unwrap();
|
||||||
|
|
||||||
assert_eq!(result, third_result);
|
assert_eq!(result, third_result);
|
||||||
}
|
}
|
||||||
|
@ -123,18 +123,18 @@ mod test {
|
||||||
fn decode_encode_cycle_self() {
|
fn decode_encode_cycle_self() {
|
||||||
let image = Cursor::new(SELF_VERIFICATION);
|
let image = Cursor::new(SELF_VERIFICATION);
|
||||||
let image = image::load(image, ImageFormat::Png).unwrap();
|
let image = image::load(image, ImageFormat::Png).unwrap();
|
||||||
let result = QrVerification::try_from(image).unwrap();
|
let result = QrVerificationData::try_from(image).unwrap();
|
||||||
|
|
||||||
assert!(matches!(result, QrVerification::SelfVerification(_)));
|
assert!(matches!(result, QrVerificationData::SelfVerification(_)));
|
||||||
|
|
||||||
let encoded = result.to_qr_code().unwrap();
|
let encoded = result.to_qr_code().unwrap();
|
||||||
let image = encoded.render::<Luma<u8>>().build();
|
let image = encoded.render::<Luma<u8>>().build();
|
||||||
let second_result = QrVerification::from_luma(image).unwrap();
|
let second_result = QrVerificationData::from_luma(image).unwrap();
|
||||||
|
|
||||||
assert_eq!(result, second_result);
|
assert_eq!(result, second_result);
|
||||||
|
|
||||||
let bytes = result.to_bytes().unwrap();
|
let bytes = result.to_bytes().unwrap();
|
||||||
let third_result = QrVerification::from_bytes(bytes).unwrap();
|
let third_result = QrVerificationData::from_bytes(bytes).unwrap();
|
||||||
|
|
||||||
assert_eq!(result, third_result);
|
assert_eq!(result, third_result);
|
||||||
}
|
}
|
||||||
|
@ -144,18 +144,18 @@ mod test {
|
||||||
fn decode_encode_cycle_self_no_master() {
|
fn decode_encode_cycle_self_no_master() {
|
||||||
let image = Cursor::new(SELF_NO_MASTER);
|
let image = Cursor::new(SELF_NO_MASTER);
|
||||||
let image = image::load(image, ImageFormat::Png).unwrap();
|
let image = image::load(image, ImageFormat::Png).unwrap();
|
||||||
let result = QrVerification::from_image(image).unwrap();
|
let result = QrVerificationData::from_image(image).unwrap();
|
||||||
|
|
||||||
assert!(matches!(result, QrVerification::SelfVerificationNoMasterKey(_)));
|
assert!(matches!(result, QrVerificationData::SelfVerificationNoMasterKey(_)));
|
||||||
|
|
||||||
let encoded = result.to_qr_code().unwrap();
|
let encoded = result.to_qr_code().unwrap();
|
||||||
let image = encoded.render::<Luma<u8>>().build();
|
let image = encoded.render::<Luma<u8>>().build();
|
||||||
let second_result = QrVerification::try_from(image).unwrap();
|
let second_result = QrVerificationData::try_from(image).unwrap();
|
||||||
|
|
||||||
assert_eq!(result, second_result);
|
assert_eq!(result, second_result);
|
||||||
|
|
||||||
let bytes = result.to_bytes().unwrap();
|
let bytes = result.to_bytes().unwrap();
|
||||||
let third_result = QrVerification::try_from(bytes).unwrap();
|
let third_result = QrVerificationData::try_from(bytes).unwrap();
|
||||||
|
|
||||||
assert_eq!(result, third_result);
|
assert_eq!(result, third_result);
|
||||||
}
|
}
|
||||||
|
@ -165,35 +165,35 @@ mod test {
|
||||||
fn decode_invalid_qr() {
|
fn decode_invalid_qr() {
|
||||||
let qr = QrCode::new(b"NonMatrixCode").expect("Can't build a simple QR code");
|
let qr = QrCode::new(b"NonMatrixCode").expect("Can't build a simple QR code");
|
||||||
let image = qr.render::<Luma<u8>>().build();
|
let image = qr.render::<Luma<u8>>().build();
|
||||||
let result = QrVerification::try_from(image);
|
let result = QrVerificationData::try_from(image);
|
||||||
assert!(matches!(result, Err(DecodingError::Header)))
|
assert!(matches!(result, Err(DecodingError::Header)))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn decode_invalid_header() {
|
fn decode_invalid_header() {
|
||||||
let data = b"NonMatrixCode";
|
let data = b"NonMatrixCode";
|
||||||
let result = QrVerification::from_bytes(data);
|
let result = QrVerificationData::from_bytes(data);
|
||||||
assert!(matches!(result, Err(DecodingError::Header)))
|
assert!(matches!(result, Err(DecodingError::Header)))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn decode_invalid_mode() {
|
fn decode_invalid_mode() {
|
||||||
let data = b"MATRIX\x02\x03";
|
let data = b"MATRIX\x02\x03";
|
||||||
let result = QrVerification::from_bytes(data);
|
let result = QrVerificationData::from_bytes(data);
|
||||||
assert!(matches!(result, Err(DecodingError::Mode(3))))
|
assert!(matches!(result, Err(DecodingError::Mode(3))))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn decode_invalid_version() {
|
fn decode_invalid_version() {
|
||||||
let data = b"MATRIX\x01\x03";
|
let data = b"MATRIX\x01\x03";
|
||||||
let result = QrVerification::from_bytes(data);
|
let result = QrVerificationData::from_bytes(data);
|
||||||
assert!(matches!(result, Err(DecodingError::Version(1))))
|
assert!(matches!(result, Err(DecodingError::Version(1))))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn decode_missing_data() {
|
fn decode_missing_data() {
|
||||||
let data = b"MATRIX\x02\x02";
|
let data = b"MATRIX\x02\x02";
|
||||||
let result = QrVerification::from_bytes(data);
|
let result = QrVerificationData::from_bytes(data);
|
||||||
assert!(matches!(result, Err(DecodingError::Read(_))))
|
assert!(matches!(result, Err(DecodingError::Read(_))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ mod test {
|
||||||
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
SECRET";
|
SECRET";
|
||||||
|
|
||||||
let result = QrVerification::from_bytes(data);
|
let result = QrVerificationData::from_bytes(data);
|
||||||
assert!(matches!(result, Err(DecodingError::SharedSecret(_))))
|
assert!(matches!(result, Err(DecodingError::SharedSecret(_))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ mod test {
|
||||||
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
SECRETISLONGENOUGH";
|
SECRETISLONGENOUGH";
|
||||||
|
|
||||||
let result = QrVerification::from_bytes(data);
|
let result = QrVerificationData::from_bytes(data);
|
||||||
assert!(matches!(result, Err(DecodingError::Identifier(_))))
|
assert!(matches!(result, Err(DecodingError::Identifier(_))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ use crate::{
|
||||||
|
|
||||||
/// An enum representing the different modes a QR verification can be in.
|
/// An enum representing the different modes a QR verification can be in.
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub enum QrVerification {
|
pub enum QrVerificationData {
|
||||||
/// The QR verification is verifying another user
|
/// The QR verification is verifying another user
|
||||||
Verification(VerificationData),
|
Verification(VerificationData),
|
||||||
/// The QR verification is self-verifying and the current device trusts or
|
/// The QR verification is self-verifying and the current device trusts or
|
||||||
|
@ -46,7 +46,7 @@ pub enum QrVerification {
|
||||||
|
|
||||||
#[cfg(feature = "decode_image")]
|
#[cfg(feature = "decode_image")]
|
||||||
#[cfg_attr(feature = "docs", doc(cfg(decode_image)))]
|
#[cfg_attr(feature = "docs", doc(cfg(decode_image)))]
|
||||||
impl TryFrom<DynamicImage> for QrVerification {
|
impl TryFrom<DynamicImage> for QrVerificationData {
|
||||||
type Error = DecodingError;
|
type Error = DecodingError;
|
||||||
|
|
||||||
fn try_from(image: DynamicImage) -> Result<Self, Self::Error> {
|
fn try_from(image: DynamicImage) -> Result<Self, Self::Error> {
|
||||||
|
@ -56,7 +56,7 @@ impl TryFrom<DynamicImage> for QrVerification {
|
||||||
|
|
||||||
#[cfg(feature = "decode_image")]
|
#[cfg(feature = "decode_image")]
|
||||||
#[cfg_attr(feature = "docs", doc(cfg(decode_image)))]
|
#[cfg_attr(feature = "docs", doc(cfg(decode_image)))]
|
||||||
impl TryFrom<ImageBuffer<Luma<u8>, Vec<u8>>> for QrVerification {
|
impl TryFrom<ImageBuffer<Luma<u8>, Vec<u8>>> for QrVerificationData {
|
||||||
type Error = DecodingError;
|
type Error = DecodingError;
|
||||||
|
|
||||||
fn try_from(image: ImageBuffer<Luma<u8>, Vec<u8>>) -> Result<Self, Self::Error> {
|
fn try_from(image: ImageBuffer<Luma<u8>, Vec<u8>>) -> Result<Self, Self::Error> {
|
||||||
|
@ -64,7 +64,7 @@ impl TryFrom<ImageBuffer<Luma<u8>, Vec<u8>>> for QrVerification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<&[u8]> for QrVerification {
|
impl TryFrom<&[u8]> for QrVerificationData {
|
||||||
type Error = DecodingError;
|
type Error = DecodingError;
|
||||||
|
|
||||||
fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
|
fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
|
||||||
|
@ -72,7 +72,7 @@ impl TryFrom<&[u8]> for QrVerification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<Vec<u8>> for QrVerification {
|
impl TryFrom<Vec<u8>> for QrVerificationData {
|
||||||
type Error = DecodingError;
|
type Error = DecodingError;
|
||||||
|
|
||||||
fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
|
fn try_from(value: Vec<u8>) -> Result<Self, Self::Error> {
|
||||||
|
@ -80,8 +80,8 @@ impl TryFrom<Vec<u8>> for QrVerification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl QrVerification {
|
impl QrVerificationData {
|
||||||
/// Decode and parse an image of a QR code into a `QrVerification`
|
/// Decode and parse an image of a QR code into a `QrVerificationData`
|
||||||
///
|
///
|
||||||
/// The image will be converted into a grey scale image before decoding is
|
/// The image will be converted into a grey scale image before decoding is
|
||||||
/// attempted
|
/// attempted
|
||||||
|
@ -92,12 +92,12 @@ impl QrVerification {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// use image;
|
/// use image;
|
||||||
///
|
///
|
||||||
/// let image = image::open("/path/to/my/image.png").unwrap();
|
/// let image = image::open("/path/to/my/image.png").unwrap();
|
||||||
/// let result = QrVerification::from_image(image)?;
|
/// let result = QrVerificationData::from_image(image)?;
|
||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -109,7 +109,7 @@ impl QrVerification {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Decode and parse an grey scale image of a QR code into a
|
/// Decode and parse an grey scale image of a QR code into a
|
||||||
/// `QrVerification`
|
/// `QrVerificationData`
|
||||||
///
|
///
|
||||||
/// # Arguments
|
/// # Arguments
|
||||||
///
|
///
|
||||||
|
@ -117,13 +117,13 @@ impl QrVerification {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```no_run
|
/// ```no_run
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// use image;
|
/// use image;
|
||||||
///
|
///
|
||||||
/// let image = image::open("/path/to/my/image.png").unwrap();
|
/// let image = image::open("/path/to/my/image.png").unwrap();
|
||||||
/// let image = image.to_luma8();
|
/// let image = image.to_luma8();
|
||||||
/// let result = QrVerification::from_luma(image)?;
|
/// let result = QrVerificationData::from_luma(image)?;
|
||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -134,7 +134,7 @@ impl QrVerification {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse the decoded payload of a QR code in byte slice form as a
|
/// Parse the decoded payload of a QR code in byte slice form as a
|
||||||
/// `QrVerification`
|
/// `QrVerificationData`
|
||||||
///
|
///
|
||||||
/// This method is useful if you would like to do your own custom QR code
|
/// This method is useful if you would like to do your own custom QR code
|
||||||
/// decoding.
|
/// decoding.
|
||||||
|
@ -145,7 +145,7 @@ impl QrVerification {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```
|
/// ```
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// let data = b"MATRIX\
|
/// let data = b"MATRIX\
|
||||||
/// \x02\x02\x00\x07\
|
/// \x02\x02\x00\x07\
|
||||||
|
@ -154,7 +154,7 @@ impl QrVerification {
|
||||||
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
/// SHARED_SECRET";
|
/// SHARED_SECRET";
|
||||||
///
|
///
|
||||||
/// let result = QrVerification::from_bytes(data)?;
|
/// let result = QrVerificationData::from_bytes(data)?;
|
||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -162,9 +162,9 @@ impl QrVerification {
|
||||||
Self::decode_bytes(bytes)
|
Self::decode_bytes(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Encode the `QrVerification` into a `QrCode`.
|
/// Encode the `QrVerificationData` into a `QrCode`.
|
||||||
///
|
///
|
||||||
/// This method turns the `QrVerification` into a QR code that can be
|
/// This method turns the `QrVerificationData` into a QR code that can be
|
||||||
/// rendered and presented to be scanned.
|
/// rendered and presented to be scanned.
|
||||||
///
|
///
|
||||||
/// The encoding can fail if the data doesn't fit into a QR code or if the
|
/// The encoding can fail if the data doesn't fit into a QR code or if the
|
||||||
|
@ -173,7 +173,7 @@ impl QrVerification {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```
|
/// ```
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// let data = b"MATRIX\
|
/// let data = b"MATRIX\
|
||||||
/// \x02\x02\x00\x07\
|
/// \x02\x02\x00\x07\
|
||||||
|
@ -182,28 +182,28 @@ impl QrVerification {
|
||||||
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
/// SHARED_SECRET";
|
/// SHARED_SECRET";
|
||||||
///
|
///
|
||||||
/// let result = QrVerification::from_bytes(data)?;
|
/// let result = QrVerificationData::from_bytes(data)?;
|
||||||
/// let encoded = result.to_qr_code().unwrap();
|
/// let encoded = result.to_qr_code().unwrap();
|
||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
pub fn to_qr_code(&self) -> Result<QrCode, EncodingError> {
|
pub fn to_qr_code(&self) -> Result<QrCode, EncodingError> {
|
||||||
match self {
|
match self {
|
||||||
QrVerification::Verification(v) => v.to_qr_code(),
|
QrVerificationData::Verification(v) => v.to_qr_code(),
|
||||||
QrVerification::SelfVerification(v) => v.to_qr_code(),
|
QrVerificationData::SelfVerification(v) => v.to_qr_code(),
|
||||||
QrVerification::SelfVerificationNoMasterKey(v) => v.to_qr_code(),
|
QrVerificationData::SelfVerificationNoMasterKey(v) => v.to_qr_code(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Encode the `QrVerification` into a vector of bytes that can be encoded
|
/// Encode the `QrVerificationData` into a vector of bytes that can be
|
||||||
/// as a QR code.
|
/// encoded as a QR code.
|
||||||
///
|
///
|
||||||
/// The encoding can fail if the identity keys that should be encoded are
|
/// The encoding can fail if the identity keys that should be encoded are
|
||||||
/// not valid base64.
|
/// not valid base64.
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```
|
/// ```
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// let data = b"MATRIX\
|
/// let data = b"MATRIX\
|
||||||
/// \x02\x02\x00\x07\
|
/// \x02\x02\x00\x07\
|
||||||
|
@ -212,7 +212,7 @@ impl QrVerification {
|
||||||
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
/// SHARED_SECRET";
|
/// SHARED_SECRET";
|
||||||
///
|
///
|
||||||
/// let result = QrVerification::from_bytes(data)?;
|
/// let result = QrVerificationData::from_bytes(data)?;
|
||||||
/// let encoded = result.to_bytes().unwrap();
|
/// let encoded = result.to_bytes().unwrap();
|
||||||
///
|
///
|
||||||
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
||||||
|
@ -221,9 +221,9 @@ impl QrVerification {
|
||||||
/// ```
|
/// ```
|
||||||
pub fn to_bytes(&self) -> Result<Vec<u8>, EncodingError> {
|
pub fn to_bytes(&self) -> Result<Vec<u8>, EncodingError> {
|
||||||
match self {
|
match self {
|
||||||
QrVerification::Verification(v) => v.to_bytes(),
|
QrVerificationData::Verification(v) => v.to_bytes(),
|
||||||
QrVerification::SelfVerification(v) => v.to_bytes(),
|
QrVerificationData::SelfVerification(v) => v.to_bytes(),
|
||||||
QrVerification::SelfVerificationNoMasterKey(v) => v.to_bytes(),
|
QrVerificationData::SelfVerificationNoMasterKey(v) => v.to_bytes(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,13 +289,13 @@ impl QrVerification {
|
||||||
return Err(DecodingError::SharedSecret(shared_secret.len()));
|
return Err(DecodingError::SharedSecret(shared_secret.len()));
|
||||||
}
|
}
|
||||||
|
|
||||||
QrVerification::new(mode, flow_id, first_key, second_key, shared_secret)
|
QrVerificationData::new(mode, flow_id, first_key, second_key, shared_secret)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Decode the given image of an QR code and if we find a valid code, try to
|
/// Decode the given image of an QR code and if we find a valid code, try to
|
||||||
/// decode it as a `QrVerification`.
|
/// decode it as a `QrVerification`.
|
||||||
#[cfg(feature = "decode_image")]
|
#[cfg(feature = "decode_image")]
|
||||||
fn decode(image: ImageBuffer<Luma<u8>, Vec<u8>>) -> Result<QrVerification, DecodingError> {
|
fn decode(image: ImageBuffer<Luma<u8>, Vec<u8>>) -> Result<QrVerificationData, DecodingError> {
|
||||||
let decoded = decode_qr(image)?;
|
let decoded = decode_qr(image)?;
|
||||||
Self::decode_bytes(decoded)
|
Self::decode_bytes(decoded)
|
||||||
}
|
}
|
||||||
|
@ -328,41 +328,41 @@ impl QrVerification {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the flow id for this `QrVerification`.
|
/// Get the flow id for this `QrVerificationData`.
|
||||||
///
|
///
|
||||||
/// This represents the ID as a string even if it is a `EventId`.
|
/// This represents the ID as a string even if it is a `EventId`.
|
||||||
pub fn flow_id(&self) -> &str {
|
pub fn flow_id(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
QrVerification::Verification(v) => v.event_id.as_str(),
|
QrVerificationData::Verification(v) => v.event_id.as_str(),
|
||||||
QrVerification::SelfVerification(v) => &v.transaction_id,
|
QrVerificationData::SelfVerification(v) => &v.transaction_id,
|
||||||
QrVerification::SelfVerificationNoMasterKey(v) => &v.transaction_id,
|
QrVerificationData::SelfVerificationNoMasterKey(v) => &v.transaction_id,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the first key of this `QrVerification`.
|
/// Get the first key of this `QrVerificationData`.
|
||||||
pub fn first_key(&self) -> &str {
|
pub fn first_key(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
QrVerification::Verification(v) => &v.first_master_key,
|
QrVerificationData::Verification(v) => &v.first_master_key,
|
||||||
QrVerification::SelfVerification(v) => &v.master_key,
|
QrVerificationData::SelfVerification(v) => &v.master_key,
|
||||||
QrVerification::SelfVerificationNoMasterKey(v) => &v.device_key,
|
QrVerificationData::SelfVerificationNoMasterKey(v) => &v.device_key,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the second key of this `QrVerification`.
|
/// Get the second key of this `QrVerificationData`.
|
||||||
pub fn second_key(&self) -> &str {
|
pub fn second_key(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
QrVerification::Verification(v) => &v.second_master_key,
|
QrVerificationData::Verification(v) => &v.second_master_key,
|
||||||
QrVerification::SelfVerification(v) => &v.device_key,
|
QrVerificationData::SelfVerification(v) => &v.device_key,
|
||||||
QrVerification::SelfVerificationNoMasterKey(v) => &v.master_key,
|
QrVerificationData::SelfVerificationNoMasterKey(v) => &v.master_key,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the secret of this `QrVerification`.
|
/// Get the secret of this `QrVerificationData`.
|
||||||
pub fn secret(&self) -> &str {
|
pub fn secret(&self) -> &str {
|
||||||
match self {
|
match self {
|
||||||
QrVerification::Verification(v) => &v.shared_secret,
|
QrVerificationData::Verification(v) => &v.shared_secret,
|
||||||
QrVerification::SelfVerification(v) => &v.shared_secret,
|
QrVerificationData::SelfVerification(v) => &v.shared_secret,
|
||||||
QrVerification::SelfVerificationNoMasterKey(v) => &v.shared_secret,
|
QrVerificationData::SelfVerificationNoMasterKey(v) => &v.shared_secret,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -412,7 +412,7 @@ impl VerificationData {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```
|
/// ```
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// let data = b"MATRIX\
|
/// let data = b"MATRIX\
|
||||||
/// \x02\x00\x00\x0f\
|
/// \x02\x00\x00\x0f\
|
||||||
|
@ -421,8 +421,8 @@ impl VerificationData {
|
||||||
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
/// SHARED_SECRET";
|
/// SHARED_SECRET";
|
||||||
///
|
///
|
||||||
/// let result = QrVerification::from_bytes(data)?;
|
/// let result = QrVerificationData::from_bytes(data)?;
|
||||||
/// if let QrVerification::Verification(decoded) = result {
|
/// if let QrVerificationData::Verification(decoded) = result {
|
||||||
/// let encoded = decoded.to_bytes().unwrap();
|
/// let encoded = decoded.to_bytes().unwrap();
|
||||||
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
||||||
/// } else {
|
/// } else {
|
||||||
|
@ -459,7 +459,7 @@ impl VerificationData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<VerificationData> for QrVerification {
|
impl From<VerificationData> for QrVerificationData {
|
||||||
fn from(data: VerificationData) -> Self {
|
fn from(data: VerificationData) -> Self {
|
||||||
Self::Verification(data)
|
Self::Verification(data)
|
||||||
}
|
}
|
||||||
|
@ -515,7 +515,7 @@ impl SelfVerificationData {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```
|
/// ```
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// let data = b"MATRIX\
|
/// let data = b"MATRIX\
|
||||||
/// \x02\x01\x00\x06\
|
/// \x02\x01\x00\x06\
|
||||||
|
@ -524,8 +524,8 @@ impl SelfVerificationData {
|
||||||
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
/// SHARED_SECRET";
|
/// SHARED_SECRET";
|
||||||
///
|
///
|
||||||
/// let result = QrVerification::from_bytes(data)?;
|
/// let result = QrVerificationData::from_bytes(data)?;
|
||||||
/// if let QrVerification::SelfVerification(decoded) = result {
|
/// if let QrVerificationData::SelfVerification(decoded) = result {
|
||||||
/// let encoded = decoded.to_bytes().unwrap();
|
/// let encoded = decoded.to_bytes().unwrap();
|
||||||
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
||||||
/// } else {
|
/// } else {
|
||||||
|
@ -562,7 +562,7 @@ impl SelfVerificationData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<SelfVerificationData> for QrVerification {
|
impl From<SelfVerificationData> for QrVerificationData {
|
||||||
fn from(data: SelfVerificationData) -> Self {
|
fn from(data: SelfVerificationData) -> Self {
|
||||||
Self::SelfVerification(data)
|
Self::SelfVerification(data)
|
||||||
}
|
}
|
||||||
|
@ -618,7 +618,7 @@ impl SelfVerificationNoMasterKey {
|
||||||
///
|
///
|
||||||
/// # Example
|
/// # Example
|
||||||
/// ```
|
/// ```
|
||||||
/// # use matrix_qrcode::{QrVerification, DecodingError};
|
/// # use matrix_qrcode::{QrVerificationData, DecodingError};
|
||||||
/// # fn main() -> Result<(), DecodingError> {
|
/// # fn main() -> Result<(), DecodingError> {
|
||||||
/// let data = b"MATRIX\
|
/// let data = b"MATRIX\
|
||||||
/// \x02\x02\x00\x06\
|
/// \x02\x02\x00\x06\
|
||||||
|
@ -627,8 +627,8 @@ impl SelfVerificationNoMasterKey {
|
||||||
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
/// BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\
|
||||||
/// SHARED_SECRET";
|
/// SHARED_SECRET";
|
||||||
///
|
///
|
||||||
/// let result = QrVerification::from_bytes(data)?;
|
/// let result = QrVerificationData::from_bytes(data)?;
|
||||||
/// if let QrVerification::SelfVerificationNoMasterKey(decoded) = result {
|
/// if let QrVerificationData::SelfVerificationNoMasterKey(decoded) = result {
|
||||||
/// let encoded = decoded.to_bytes().unwrap();
|
/// let encoded = decoded.to_bytes().unwrap();
|
||||||
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
/// assert_eq!(data.as_ref(), encoded.as_slice());
|
||||||
/// } else {
|
/// } else {
|
||||||
|
@ -665,7 +665,7 @@ impl SelfVerificationNoMasterKey {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<SelfVerificationNoMasterKey> for QrVerification {
|
impl From<SelfVerificationNoMasterKey> for QrVerificationData {
|
||||||
fn from(data: SelfVerificationNoMasterKey) -> Self {
|
fn from(data: SelfVerificationNoMasterKey) -> Self {
|
||||||
Self::SelfVerificationNoMasterKey(data)
|
Self::SelfVerificationNoMasterKey(data)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue