Skip to content

Commit

Permalink
feat(types): Add priv in inner type
Browse files Browse the repository at this point in the history
  • Loading branch information
tu6ge committed Apr 10, 2023
1 parent 141fcb9 commit 671cb12
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 64 deletions.
4 changes: 2 additions & 2 deletions src/bucket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -258,10 +258,10 @@ mod test_bucket_error {
fn assert_impl<T: ItemError>() {}
#[test]
fn display() {
let error = BucketError::BucketName(InvalidBucketName {}, "abc".to_string());
let error = BucketError::BucketName(InvalidBucketName { _priv: () }, "abc".to_string());
assert_eq!(error.to_string(), "covert bucket name failed, bucket 名称只允许小写字母、数字、短横线(-),且不能以短横线开头或结尾, source str: abc");

let error = BucketError::EndPoint(InvalidEndPoint {}, "abc".to_string());
let error = BucketError::EndPoint(InvalidEndPoint { _priv: () }, "abc".to_string());
assert_eq!(error.to_string(), "convert endpoint failed, endpoint must not with `-` prefix or `-` suffix or `oss-` prefix, source str: abc");

let error = BucketError::InvalidStorageClass("abc".to_string());
Expand Down
8 changes: 4 additions & 4 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,14 +512,14 @@ mod tests {

#[test]
fn test_invalid_config() {
let error = InvalidEndPoint {};
let error = InvalidEndPoint { _priv: () };
let error2: InvalidConfig = error.into();
assert_eq!(
format!("{error2}"),
"endpoint must not with `-` prefix or `-` suffix or `oss-` prefix"
);

let error = InvalidBucketName {};
let error = InvalidBucketName { _priv: () };
let error2: InvalidConfig = error.into();
assert_eq!(
format!("{error2}"),
Expand Down Expand Up @@ -587,14 +587,14 @@ mod tests {

#[test]
fn test_invalid_bucket_base() {
let error = InvalidEndPoint {};
let error = InvalidEndPoint { _priv: () };
let base_err: InvalidBucketBase = error.into();
assert_eq!(
format!("{base_err}"),
"endpoint must not with `-` prefix or `-` suffix or `oss-` prefix"
);

let error = InvalidBucketName {};
let error = InvalidBucketName { _priv: () };
let error2: InvalidBucketBase = error.into();
assert_eq!(
format!("{error2}"),
Expand Down
20 changes: 10 additions & 10 deletions src/tests/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -74,29 +74,29 @@ mod debug {

#[test]
fn test_endpoint() {
let err = Error::InvalidEndPoint(InvalidEndPoint {});
let err = Error::InvalidEndPoint(InvalidEndPoint { _priv: () });
assert_eq!(
format!("{err}"),
"endpoint must not with `-` prefix or `-` suffix or `oss-` prefix"
);

fn bar() -> Error {
InvalidEndPoint {}.into()
InvalidEndPoint { _priv: () }.into()
}
assert_eq!(format!("{:?}", bar()), "InvalidEndPoint(InvalidEndPoint)");
}

#[test]
fn test_bucket_name() {
let err = Error::InvalidBucketName(InvalidBucketName {});
let err = Error::InvalidBucketName(InvalidBucketName { _priv: () });

assert_eq!(
format!("{err}"),
"bucket 名称只允许小写字母、数字、短横线(-),且不能以短横线开头或结尾"
);

fn bar() -> Error {
InvalidBucketName {}.into()
InvalidBucketName { _priv: () }.into()
}
assert_eq!(
format!("{:?}", bar()),
Expand All @@ -107,15 +107,15 @@ mod debug {
#[test]
fn test_config() {
use crate::config::InvalidConfig::BucketName;
let err = Error::InvalidConfig(BucketName(InvalidBucketName {}));
let err = Error::InvalidConfig(BucketName(InvalidBucketName { _priv: () }));

assert_eq!(
format!("{err}"),
"bucket 名称只允许小写字母、数字、短横线(-),且不能以短横线开头或结尾"
);

fn bar() -> Error {
BucketName(InvalidBucketName {}).into()
BucketName(InvalidBucketName { _priv: () }).into()
}
assert_eq!(
format!("{:?}", bar()),
Expand All @@ -125,12 +125,12 @@ mod debug {

#[test]
fn test_object_path() {
let err = Error::InvalidObjectPath(InvalidObjectPath {});
let err = Error::InvalidObjectPath(InvalidObjectPath { _priv: () });

assert_eq!(format!("{err}"), "invalid object path");

fn bar() -> Error {
InvalidObjectPath {}.into()
InvalidObjectPath { _priv: () }.into()
}
assert_eq!(
format!("{:?}", bar()),
Expand All @@ -140,12 +140,12 @@ mod debug {

#[test]
fn test_object_dir() {
let err = Error::InvalidObjectDir(InvalidObjectDir {});
let err = Error::InvalidObjectDir(InvalidObjectDir { _priv: () });

assert_eq!(format!("{err}"), "ObjectDir must end with `/`");

fn bar() -> Error {
InvalidObjectDir {}.into()
InvalidObjectDir { _priv: () }.into()
}
assert_eq!(format!("{:?}", bar()), "InvalidObjectDir(InvalidObjectDir)");
}
Expand Down
56 changes: 38 additions & 18 deletions src/types.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use std::borrow::Cow;
use std::collections::HashMap;
use std::error::Error;
use std::fmt::{self, Display, Formatter};
use std::fmt::{self, Debug, Display, Formatter};
use std::str::FromStr;

use chrono::{DateTime, Utc};
Expand Down Expand Up @@ -329,15 +329,15 @@ impl<'a> EndPoint {
Ok(ApSouthEast1)
} else {
if url.is_empty() {
return Err(InvalidEndPoint);
return Err(InvalidEndPoint { _priv: () });
}

if url.starts_with('-') || url.ends_with('-') {
return Err(InvalidEndPoint);
return Err(InvalidEndPoint { _priv: () });
}

if url.starts_with("oss") {
return Err(InvalidEndPoint);
return Err(InvalidEndPoint { _priv: () });
}

fn valid_character(c: char) -> bool {
Expand All @@ -349,7 +349,7 @@ impl<'a> EndPoint {
}
}
if !url.chars().all(valid_character) {
return Err(InvalidEndPoint);
return Err(InvalidEndPoint { _priv: () });
}

Ok(Other(Cow::Owned(url.to_owned())))
Expand All @@ -359,7 +359,7 @@ impl<'a> EndPoint {
/// 从 oss 域名中提取 Endpoint 信息
pub(crate) fn from_host_piece(url: &'a str) -> Result<Self, InvalidEndPoint> {
if !url.starts_with("oss-") {
return Err(InvalidEndPoint);
return Err(InvalidEndPoint { _priv: () });
}
Self::new(&url[4..])
}
Expand Down Expand Up @@ -459,9 +459,17 @@ mod test_endpoint {
}

/// 无效的可用区
#[derive(Debug, PartialEq, Eq, Hash)]
#[derive(PartialEq, Eq, Hash)]
#[non_exhaustive]
pub struct InvalidEndPoint;
pub struct InvalidEndPoint {
pub(crate) _priv: (),
}

impl Debug for InvalidEndPoint {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("InvalidEndPoint").finish()
}
}

impl Error for InvalidEndPoint {}

Expand Down Expand Up @@ -599,11 +607,11 @@ impl<'a> BucketName {
let bucket = bucket.into();

if bucket.is_empty() {
return Err(InvalidBucketName);
return Err(InvalidBucketName { _priv: () });
}

if bucket.starts_with('-') || bucket.ends_with('-') {
return Err(InvalidBucketName);
return Err(InvalidBucketName { _priv: () });
}

fn valid_character(c: char) -> bool {
Expand All @@ -615,7 +623,7 @@ impl<'a> BucketName {
}
}
if !bucket.chars().all(valid_character) {
return Err(InvalidBucketName);
return Err(InvalidBucketName { _priv: () });
}

Ok(Self(bucket))
Expand All @@ -634,11 +642,11 @@ impl<'a> BucketName {
/// ```
pub fn from_static(bucket: &'a str) -> Result<Self, InvalidBucketName> {
if bucket.is_empty() {
return Err(InvalidBucketName);
return Err(InvalidBucketName { _priv: () });
}

if bucket.starts_with('-') || bucket.ends_with('-') {
return Err(InvalidBucketName);
return Err(InvalidBucketName { _priv: () });
}

fn valid_character(c: char) -> bool {
Expand All @@ -650,7 +658,7 @@ impl<'a> BucketName {
}
}
if !bucket.chars().all(valid_character) {
return Err(InvalidBucketName);
return Err(InvalidBucketName { _priv: () });
}

Ok(Self(Cow::Owned(bucket.to_owned())))
Expand Down Expand Up @@ -689,9 +697,17 @@ impl PartialEq<BucketName> for &str {
}

/// 无效的 bucket 名称
#[derive(Debug, PartialEq)]
#[derive(PartialEq)]
#[non_exhaustive]
pub struct InvalidBucketName;
pub struct InvalidBucketName {
pub(crate) _priv: (),
}

impl Debug for InvalidBucketName {
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
f.debug_struct("InvalidBucketName").finish()
}
}

impl Error for InvalidBucketName {}

Expand Down Expand Up @@ -1563,7 +1579,9 @@ impl FromStr for QueryKey {

/// 异常的查询条件键
#[derive(Debug)]
pub struct InvalidQueryKey;
pub struct InvalidQueryKey {
_priv: (),
}

impl Error for InvalidQueryKey {}

Expand Down Expand Up @@ -1770,7 +1788,9 @@ impl FromStr for InnerQueryValue<'_> {

/// 异常的查询值
#[derive(Debug)]
pub struct InvalidQueryValue;
pub struct InvalidQueryValue {
_priv: (),
}

impl Error for InvalidQueryValue {}

Expand Down
Loading

0 comments on commit 671cb12

Please sign in to comment.