Skip to content

Commit

Permalink
feat: added PartialEq to Cors (#486)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
CommanderStorm and robjtede authored Jan 13, 2025
1 parent 87d9e51 commit 695369f
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 30 deletions.
29 changes: 0 additions & 29 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,32 +46,3 @@ jobs:
clippy_flags: >-
--workspace --all-features --tests --examples --bins --
-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/[email protected]
with:
toolchain: ${{ vars.RUST_VERSION_API_DIFF }}

- name: Install cargo-public-api
uses: taiki-e/[email protected]
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 changes: 2 additions & 0 deletions actix-cors/CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Unreleased

- Implement `PartialEq` for `Cors` allowing for better testing. [#486]

## 0.7.0

- `Cors` is now marked `#[must_use]`.
Expand Down
20 changes: 20 additions & 0 deletions actix-cors/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,19 @@ where
.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)]
mod test {
use std::convert::Infallible;
Expand Down Expand Up @@ -679,4 +692,11 @@ mod test {

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());
}
}
8 changes: 7 additions & 1 deletion actix-cors/src/inner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str("origin_fn")
Expand All @@ -40,7 +46,7 @@ pub(crate) fn header_value_try_into_method(hdr: &HeaderValue) -> Option<Method>
.and_then(|meth| Method::try_from(meth).ok())
}

#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq)]
pub(crate) struct Inner {
pub(crate) allowed_origins: AllOrSome<HashSet<HeaderValue>>,
pub(crate) allowed_origins_fns: SmallVec<[OriginFn; 4]>,
Expand Down

0 comments on commit 695369f

Please sign in to comment.