mirror of
https://github.com/actix/actix-extras.git
synced 2025-01-22 06:45:56 +01:00
feat: added PartialEq to Cors (#486)
* added PartialEq to Cors * added a changelog entry * re-ran rustfmt * removed a subtle bug in the new testcase * removed a not so subtle bug in the new testcase * ci: rm public-api-diff job --------- Co-authored-by: Rob Ede <robjtede@icloud.com>
This commit is contained in:
parent
87d9e51112
commit
695369f02f
29
.github/workflows/lint.yml
vendored
29
.github/workflows/lint.yml
vendored
@ -46,32 +46,3 @@ jobs:
|
|||||||
clippy_flags: >-
|
clippy_flags: >-
|
||||||
--workspace --all-features --tests --examples --bins --
|
--workspace --all-features --tests --examples --bins --
|
||||||
-A unknown_lints -D clippy::todo -D clippy::dbg_macro
|
-A unknown_lints -D clippy::todo -D clippy::dbg_macro
|
||||||
|
|
||||||
public-api-diff:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: checkout ${{ github.base_ref }}
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
ref: ${{ github.base_ref }}
|
|
||||||
|
|
||||||
- name: checkout ${{ github.head_ref }}
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Install Rust (${{ vars.RUST_VERSION_API_DIFF }})
|
|
||||||
uses: actions-rust-lang/setup-rust-toolchain@v1.10.1
|
|
||||||
with:
|
|
||||||
toolchain: ${{ vars.RUST_VERSION_API_DIFF }}
|
|
||||||
|
|
||||||
- name: Install cargo-public-api
|
|
||||||
uses: taiki-e/cache-cargo-install-action@v2.0.1
|
|
||||||
with:
|
|
||||||
tool: cargo-public-api
|
|
||||||
|
|
||||||
- name: generate API diff
|
|
||||||
run: |
|
|
||||||
for f in $(find -mindepth 2 -maxdepth 2 -name Cargo.toml); do
|
|
||||||
|
|
||||||
cargo public-api --manifest-path "$f" --all-features diff ${{ github.event.pull_request.base.sha }}..${{ github.sha }} >> /tmp/diff.txt
|
|
||||||
done
|
|
||||||
cat /tmp/diff.txt
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
- Implement `PartialEq` for `Cors` allowing for better testing. [#486]
|
||||||
|
|
||||||
## 0.7.0
|
## 0.7.0
|
||||||
|
|
||||||
- `Cors` is now marked `#[must_use]`.
|
- `Cors` is now marked `#[must_use]`.
|
||||||
|
@ -608,6 +608,19 @@ where
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PartialEq for Cors {
|
||||||
|
fn eq(&self, other: &Self) -> bool {
|
||||||
|
self.inner == other.inner
|
||||||
|
// Because of the cors-function, checking if the content is equal implies that the errors are equal
|
||||||
|
//
|
||||||
|
// Proof by contradiction:
|
||||||
|
// Lets assume that the inner values are equal, but the error values are not.
|
||||||
|
// This means there had been an error, which has been fixed.
|
||||||
|
// This cannot happen as the first call to set the invalid value means that further usages of the cors-function will reject other input.
|
||||||
|
// => inner has to be in a different state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use std::convert::Infallible;
|
use std::convert::Infallible;
|
||||||
@ -679,4 +692,11 @@ mod test {
|
|||||||
|
|
||||||
Cors::default().new_transform(srv).await.unwrap();
|
Cors::default().new_transform(srv).await.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn impl_eq() {
|
||||||
|
assert_eq!(Cors::default(), Cors::default());
|
||||||
|
assert_ne!(Cors::default().send_wildcard(), Cors::default());
|
||||||
|
assert_ne!(Cors::default(), Cors::permissive());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,12 @@ impl Default for OriginFn {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl PartialEq for OriginFn {
|
||||||
|
fn eq(&self, other: &Self) -> bool {
|
||||||
|
Rc::ptr_eq(&self.boxed_fn, &other.boxed_fn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl fmt::Debug for OriginFn {
|
impl fmt::Debug for OriginFn {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
f.write_str("origin_fn")
|
f.write_str("origin_fn")
|
||||||
@ -40,7 +46,7 @@ pub(crate) fn header_value_try_into_method(hdr: &HeaderValue) -> Option<Method>
|
|||||||
.and_then(|meth| Method::try_from(meth).ok())
|
.and_then(|meth| Method::try_from(meth).ok())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone, PartialEq)]
|
||||||
pub(crate) struct Inner {
|
pub(crate) struct Inner {
|
||||||
pub(crate) allowed_origins: AllOrSome<HashSet<HeaderValue>>,
|
pub(crate) allowed_origins: AllOrSome<HashSet<HeaderValue>>,
|
||||||
pub(crate) allowed_origins_fns: SmallVec<[OriginFn; 4]>,
|
pub(crate) allowed_origins_fns: SmallVec<[OriginFn; 4]>,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user