Compare commits

..

No commits in common. "main" and "gh-pages" have entirely different histories.

1116 changed files with 201032 additions and 32138 deletions

View File

@ -1,2 +0,0 @@
[doc.extern-map.registries]
crates-io = "https://docs.rs/"

1
.github/FUNDING.yml vendored
View File

@ -1 +0,0 @@
github: [epilys]

View File

@ -1,97 +0,0 @@
<style>
.rustdoc { flex-wrap: wrap; }
@media (prefers-color-scheme: light) {
:root {
--border-primary: #cdcdcd;
--border-secondary: #cdcdcd;
--a-normal-text: #034575;
--a-normal-underline: #bbb;
--a-visited-underline: #707070;
--a-hover-bg: #bfbfbf40;
--a-active-text: #c00;
--a-active-underline: #c00;
--accent-primary: #0085f2;
--accent-primary-engage: #0085f21a;
--accent-secondary: #0085f2;
--accent-tertiary: #0085f21a;
color-scheme: light;
}
}
@media (prefers-color-scheme: dark) {
:root {
--border-primary: #858585;
--border-secondary: #696969;
--a-normal-text: #4db4ff;
--a-normal-underline: #8b8b8b;
--a-visited-underline: #707070;
--a-hover-bg: #bfbfbf40;
--a-active-text: #c00;
--a-active-underline: #c00;
--accent-primary: #5e9eff;
--accent-primary-engage: #5e9eff1a;
--accent-secondary: #5e9eff;
--accent-tertiary: #0085f21a;
color-scheme: dark;
}
}
nav.main-nav {
padding: 0rem 1rem;
border: 0.1rem solid var(--border-secondary);
border-left: none;
border-right: none;
border-radius: 2px;
padding: 10px 14px 10px 10px;
margin-bottom: 10px;
/*! width: 100%; */
height: max-content;
width: 100vw;
}
nav.main-nav * {
padding: 0;
margin: 0;
}
nav.main-nav > ul {
display: flex;
flex-wrap: wrap;
row-gap: 1rem;
list-style: none;
}
nav.main-nav > ul > li > a {
padding: 1rem;
}
nav.main-nav a[href] {
text-decoration: underline;
text-decoration-color: currentcolor;
color: #034575;
color: var(--a-normal-text);
text-decoration-color: #707070;
text-decoration-color: var(--accent-secondary);
text-decoration-skip-ink: none;
font-synthesis: none;
font-feature-settings: "onum" 1;
text-rendering: optimizeLegibility;
font-family: -apple-system,BlinkMacSystemFont,Roboto,Roboto Slab,Droid Serif,Segoe UI,system-ui,Arial,sans-serif;
font-size: 1.125em;
}
nav.main-nav > ul > li > a:hover {
outline: 0.1rem solid;
outline-offset: -0.5rem;
}
a[href]:focus, a[href]:hover {
text-decoration-thickness: 2px;
text-decoration-skip-ink: none;
}
</style>
<nav class="main-nav">
<ul>
<li><a href="https://git.meli.delivery/meli/mailpot">Gitea Repository</a></li>
<li><a href="https://github.com/meli/mailpot">Github Repository</a></li>
<li><a href="https://lists.meli.delivery/">Official Instance</a></li>
<li><a href="https://meli.github.io/mailpot/lists/2/">Static Demo</a></li>
</ul>
</nav>

5
.github/grcov.yml vendored
View File

@ -1,5 +0,0 @@
ignore-not-existing: true
branch: true
output-type: html
binary-path: ./target/debug/
output-path: ./coverage/

View File

@ -1,96 +0,0 @@
name: Build release binary
env:
RUST_BACKTRACE: 1
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
SQLITE_BIN: /home/runner/.sqlite3/sqlite3
on:
workflow_dispatch:
push:
tags:
- v*
jobs:
build:
name: Build on ${{ matrix.build }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
build: [linux-amd64, ]
include:
- build: linux-amd64
os: ubuntu-latest
rust: stable
artifact_name: 'mailpot-linux-amd64'
target: x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v2
- id: cache-sqlite3-bin
name: Cache sqlite3 binary
uses: actions/cache@v3
with:
path: /home/runner/.sqlite3
key: toolchain-sqlite3
- if: ${{ steps.cache-sqlite3-bin.outputs.cache-hit != 'true' }}
name: Download sqlite3 binary
run: |
set -ex
sudo apt-get install -y --quiet wget unzip
mkdir -p /home/runner/.sqlite3
cd /home/runner/.sqlite3
wget "https://sqlite.org/2023/sqlite-tools-linux-x86-3420000.zip"
unzip sqlite-tools-linux-x86-3420000.zip
mv sqlite-tools-linux-x86-3420000/* .
rm -rf sqlite-tools-linux-x86-3420000*
echo "SQLITE_BIN=$(pwd)/sqlite3" >> $GITHUB_ENV
- id: cache-rustup
name: Cache Rust toolchain
uses: actions/cache@v3
with:
path: ~/.rustup
key: toolchain-${{ matrix.os }}-${{ matrix.rust }}
- if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }}
name: Install Rust ${{ matrix.rust }}
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust }}
target: ${{ matrix.target }}
override: true
- name: Configure cargo data directory
# After this point, all cargo registry and crate data is stored in
# $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
# that are needed during the build process. Additionally, this works
# around a bug in the 'cache' action that causes directories outside of
# the workspace dir to be saved/restored incorrectly.
run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
- id: cache-cargo
name: Cache cargo configuration and installations
uses: actions/cache@v3
with:
path: ${{ env.CARGO_HOME }}
key: cargo-${{ matrix.os }}-${{ matrix.rust }}
- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
name: Setup Rust target
run: |
mkdir -p "${{ env.CARGO_HOME }}"
cat << EOF > "${{ env.CARGO_HOME }}"/config.toml
[build]
target = "${{ matrix.target }}"
EOF
- name: Build binary
run: |
cargo build --release --bin mpot --bin mpot-gen --bin mpot-web -p mailpot-cli -p mailpot-archives -p mailpot-web
mkdir artifacts
mv target/*/release/* target/ || true
mv target/release/* target/ || true
mv target/mpot target/mpot-web target/mpot-gen artifacts/
- name: Upload Artifacts
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.artifact_name }}
path: artifacts
if-no-files-found: error
retention-days: 7

View File

@ -1,114 +0,0 @@
name: Code coverage
env:
RUST_BACKTRACE: 1
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
SQLITE_BIN: /home/runner/.sqlite3/sqlite3
on:
workflow_dispatch:
workflow_run:
workflows: [Tests]
types: [completed]
branches: [main]
jobs:
on-success:
runs-on: ubuntu-latest #if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: actions/checkout@v1
- id: cache-sqlite3-bin
name: Cache sqlite3 binary
uses: actions/cache@v3
with:
path: /home/runner/.sqlite3
key: toolchain-sqlite3
- if: ${{ steps.cache-sqlite3-bin.outputs.cache-hit != 'true' }}
name: Download sqlite3 binary
run: |
set -ex
sudo apt-get install -y --quiet wget unzip
mkdir -p /home/runner/.sqlite3
cd /home/runner/.sqlite3
wget "https://sqlite.org/2023/sqlite-tools-linux-x86-3420000.zip"
unzip sqlite-tools-linux-x86-3420000.zip
mv sqlite-tools-linux-x86-3420000/* .
rm -rf sqlite-tools-linux-x86-3420000*
echo "SQLITE_BIN=$(pwd)/sqlite3" >> $GITHUB_ENV
- id: cache-rustup
name: Cache Rust toolchain
uses: actions/cache@v3
with:
path: ~/.rustup
key: toolchain-grcov
- id: cache-cargo
name: Cache Cargo
uses: actions/cache@v3
with:
path: ~/.cargo
key: cargo-grcov
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- uses: actions-rs/cargo@v1
with:
command: test
args: --all --all-features --no-fail-fast
env:
CARGO_INCREMENTAL: '0'
RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests -Cinstrument-coverage'
RUSTDOCFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests -Cinstrument-coverage'
- uses: actions-rs/grcov@v0.1
with:
config: .github/grcov.yml
- name: Upload report artifacts
uses: actions/upload-artifact@v3
with:
name: report
path: coverage
deploy:
# Add a dependency to the build job
needs: on-success
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
# Specify runner + deployment step
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/checkout@v3
with:
ref: 'gh-pages'
token: ${{ secrets.GRCOVGHPAGES }}
- name: Download coverage data
id: download
uses: actions/download-artifact@v3
with:
name: report
path: coverage
- name: 'Echo download path'
run: echo ${{steps.download.outputs.download-path}}
- name: Display structure of downloaded files
run: ls -R
- name: Push
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git show-ref
git add coverage
git commit -m "Update grcov report"
git show-ref
git branch --verbose
git remote set-url origin "https://${{github.actor}}:${{ secrets.GRCOVGHPAGES }}@github.com/${{github.repository}}.git"
git push

View File

@ -1,100 +0,0 @@
name: Build rustdoc for Github Pages
env:
RUST_BACKTRACE: 1
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
SQLITE_BIN: /home/runner/.sqlite3/sqlite3
on:
workflow_dispatch:
jobs:
build-docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- id: cache-sqlite3-bin
name: Cache sqlite3 binary
uses: actions/cache@v3
with:
path: /home/runner/.sqlite3
key: toolchain-sqlite3
- if: ${{ steps.cache-sqlite3-bin.outputs.cache-hit != 'true' }}
name: Download sqlite3 binary
run: |
set -ex
sudo apt-get install -y --quiet wget unzip
mkdir -p /home/runner/.sqlite3
cd /home/runner/.sqlite3
wget "https://sqlite.org/2023/sqlite-tools-linux-x86-3420000.zip"
unzip sqlite-tools-linux-x86-3420000.zip
mv sqlite-tools-linux-x86-3420000/* .
rm -rf sqlite-tools-linux-x86-3420000*
echo "SQLITE_BIN=$(pwd)/sqlite3" >> $GITHUB_ENV
- id: cache-rustup
name: Cache Rust toolchain
uses: actions/cache@v3
with:
path: ~/.rustup
key: toolchain-grcov
- id: cache-cargo
name: Cache Cargo
uses: actions/cache@v3
with:
path: ~/.cargo
key: cargo-grcov
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
- name: Make rustdocs
run: |
make rustdoc-nightly || make rustdoc
rm -rf docs
ls -R
mv target/doc docs
- name: Upload report artifacts
uses: actions/upload-artifact@v3
with:
name: docs
path: docs
deploy-docs:
needs: build-docs
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/checkout@v3
with:
ref: 'gh-pages'
token: ${{ secrets.GRCOVGHPAGES }}
- name: Download docs
id: download
uses: actions/download-artifact@v3
with:
name: docs
path: docs
- name: 'Echo download path'
run: echo ${{steps.download.outputs.download-path}}
- name: Display structure of downloaded files
run: ls -R
- name: Push
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git show-ref
git add docs
git commit -m "Update rustdoc"
git show-ref
git branch --verbose
git remote set-url origin "https://${{github.actor}}:${{ secrets.GRCOVGHPAGES }}@github.com/${{github.repository}}.git"
git push

View File

@ -1,114 +0,0 @@
name: Tests
env:
RUST_BACKTRACE: 1
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
SQLITE_BIN: /home/runner/.sqlite3/sqlite3
on:
workflow_dispatch:
push:
branches:
- '**'
paths:
- 'core/src/**'
- 'core/tests/**'
- 'core/Cargo.toml'
- 'Cargo.lock'
jobs:
test:
name: Test on ${{ matrix.build }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
build: [linux-amd64, ]
include:
- build: linux-amd64
os: ubuntu-latest
rust: stable
target: x86_64-unknown-linux-gnu
steps:
- uses: actions/checkout@v2
- id: cache-sqlite3-bin
name: Cache sqlite3 binary
uses: actions/cache@v3
with:
path: /home/runner/.sqlite3
key: toolchain-sqlite3
- if: ${{ steps.cache-sqlite3-bin.outputs.cache-hit != 'true' }}
name: Download sqlite3 binary
run: |
set -ex
sudo apt-get install -y --quiet wget unzip
mkdir -p /home/runner/.sqlite3
cd /home/runner/.sqlite3
wget "https://sqlite.org/2023/sqlite-tools-linux-x86-3420000.zip"
unzip sqlite-tools-linux-x86-3420000.zip
mv sqlite-tools-linux-x86-3420000/* .
rm -rf sqlite-tools-linux-x86-3420000*
echo "SQLITE_BIN=$(pwd)/sqlite3" >> $GITHUB_ENV
- id: cache-rustup
name: Cache Rust toolchain
uses: actions/cache@v3
with:
path: ~/.rustup
key: toolchain-${{ matrix.os }}-${{ matrix.rust }}
- if: ${{ steps.cache-rustup.outputs.cache-hit != 'true' }}
name: Install Rust ${{ matrix.rust }}
uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: ${{ matrix.rust }}
components: clippy, rustfmt
target: ${{ matrix.target }}
override: true
- name: Configure cargo data directory
# After this point, all cargo registry and crate data is stored in
# $GITHUB_WORKSPACE/.cargo_home. This allows us to cache only the files
# that are needed during the build process. Additionally, this works
# around a bug in the 'cache' action that causes directories outside of
# the workspace dir to be saved/restored incorrectly.
run: echo "CARGO_HOME=$(pwd)/.cargo_home" >> $GITHUB_ENV
- id: cache-cargo
name: Cache cargo configuration and installations
uses: actions/cache@v3
with:
path: ${{ env.CARGO_HOME }}
key: cargo-${{ matrix.os }}-${{ matrix.rust }}
- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
name: Setup Rust target
run: |
mkdir -p "${{ env.CARGO_HOME }}"
cat << EOF > "${{ env.CARGO_HOME }}"/config.toml
[build]
target = "${{ matrix.target }}"
EOF
- if: ${{ steps.cache-cargo.outputs.cache-hit != 'true' }} && matrix.target
name: Add lint dependencies
run: |
cargo install --target "${{ matrix.target }}" cargo-sort
- name: cargo-check
run: |
cargo check --all-features --all --tests --examples --benches --bins
- name: cargo test
if: success() || failure() # always run even if other steps fail, except when cancelled <https://stackoverflow.com/questions/58858429/how-to-run-a-github-actions-step-even-if-the-previous-step-fails-while-still-f>
run: |
cargo test --all --no-fail-fast --all-features
- name: cargo-sort
if: success() || failure()
run: |
cargo sort --check
- name: rustfmt
if: success() || failure()
run: |
cargo fmt --check --all
- name: clippy
if: success() || failure()
run: |
cargo clippy --no-deps --all-features --all --tests --examples --benches --bins
- name: rustdoc
if: success() || failure()
run: |
make rustdoc

View File

@ -1,128 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
manos@pitsidianak.is.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@ -1,102 +0,0 @@
# Contributing to mailpot
Contributions are welcome and encouraged.
They can be anything from spelling corrections, art, documentation, or source code fixes & additions.
If a source code contribution is correct, functional and follows the code style and feature goals of the rest of the project, it will be merged.
**Table of contents**:
- [Important links](#important-links)
- [Developing environment](#developing-environment)
- [Testing](#testing)
- [How to submit changes](#how-to-submit-changes)
- [Choosing what to work on](#choosing-what-to-work-on)
- [How to request an enhancement, new features](#how-to-request-an-enhancement-new-features)
- [Style Guide / Coding conventions](#style-guide--coding-conventions)
- [Specific questions and answers](#specific-questions-and-answers)
- [How do I include new images / icons?](#how-do-i-include-new-images--icons)
## Important links
- Main repository: <https://git.meli.delivery/meli/mailpot>
- Bug/Issue tracker: <https://git.meli.delivery/meli/mailpot/issues>
- Mailing list: <https://lists.meli.delivery/list/mailpot-general/>
To privately contact the repository's owner, check their commit history for their e-mail address.
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>
## Developing environment
You will need a UNIX-like operating system that is supported by Rust.
You can install rust and cargo with the [`rustup`](https://rustup.rs) tool.
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>
## Testing
All tests can be executed with `cargo`.
Run
```shell
cargo test --all --no-fail-fast --all-features
```
to run all tests.
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>
## How to submit changes
Use gitea's PR functionality.
Alternatively, submit patches to the mailing list.
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>
## Choosing what to work on
You can find some tasks in the bug tracker.
Additionally, tasks are annotated inside the source code with the keywords `FIXME`, `TODO` and others.
For a list of all tags search for `[tag:`.
For a list of all references search for `[ref:`.
To find tag references you can use a text search tool of your choice such as `grep`, `ripgrep` or others.
The CLI tool `tagref` can also be used:
```shell
/path/to/mailpot $ tagref list-refs
[ref:FIXME] @ ./src/module.rs:106
[ref:FIXME] @ ./src/module.rs:867
[ref:FIXME] @ ./src/module.rs:30
[ref:TODO] @ ./src/where.rs:411
...
```
You can of course filter or sort them by tag:
```shell
/path/to/mailpot $ tagref list-refs | grep TODO
...
/path/to/mailpot $ tagref list-refs | sort -u
...
```
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>
## How to request an enhancement, new features
Simply open a new issue on the bug tracker or post on the mailing list.
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>
## Style Guide / Coding conventions
All Rust code must be formatted by `rustfmt`, and pass clippy lints.
```shell
cargo check --all-features --all --tests --examples --benches --bins
cargo +nightly fmt --all || cargo fmt --all
cargo clippy --no-deps --all-features --all --tests --examples --benches --bins
djhtml -i web/src/templates/* || printf "djhtml binary not found in PATH.\n"
```
<sup><sub><a href="#contributing-to-mailpot">back to top</a></sub></sup>

4667
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +0,0 @@
[workspace]
resolver = "2"
members = [
"mailpot",
"mailpot-archives",
"mailpot-cli",
"mailpot-http",
"mailpot-tests",
"mailpot-web",
]
[profile.release]
lto = "fat"
opt-level = "z"
codegen-units = 1
split-debuginfo = "unpacked"

View File

@ -1,46 +0,0 @@
.POSIX:
.SUFFIXES:
CARGOBIN = cargo
CARGOSORTBIN = cargo-sort
DJHTMLBIN = djhtml
BLACKBIN = black
PRINTF = /usr/bin/printf
HTML_FILES := $(shell find mailpot-web/src/templates -type f -print0 | tr '\0' ' ')
PY_FILES := $(shell find . -type f -name '*.py' -print0 | tr '\0' ' ')
.PHONY: check
check:
@$(CARGOBIN) check --all-features --all --tests --examples --benches --bins
.PHONY: fmt
fmt:
@$(CARGOBIN) +nightly fmt --all || $(CARGOBIN) fmt --all
@OUT=$$($(CARGOSORTBIN) -w 2>&1) || $(PRINTF) "ERROR: %s cargo-sort failed or binary not found in PATH.\n" "$$OUT"
@OUT=$$($(DJHTMLBIN) $(HTML_FILES) 2>&1) || $(PRINTF) "ERROR: %s djhtml failed or binary not found in PATH.\n" "$$OUT"
@OUT=$$($(BLACKBIN) -q $(PY_FILES) 2>&1) || $(PRINTF) "ERROR: %s black failed or binary not found in PATH.\n" "$$OUT"
.PHONY: lint
lint:
@$(CARGOBIN) clippy --no-deps --all-features --all --tests --examples --benches --bins
.PHONY: test
test: check lint
@$(CARGOBIN) nextest run --all --no-fail-fast --all-features
.PHONY: rustdoc
rustdoc:
@RUSTDOCFLAGS="--html-before-content ./.github/doc_extra.html" $(CARGOBIN) doc --workspace --all-features --no-deps --document-private-items
.PHONY: rustdoc-open
rustdoc-open:
@RUSTDOCFLAGS="--html-before-content ./.github/doc_extra.html" $(CARGOBIN) doc --workspace --all-features --no-deps --document-private-items --open
.PHONY: rustdoc-nightly
rustdoc-nightly:
@RUSTDOCFLAGS="--html-before-content ./.github/doc_extra.html" $(CARGOBIN) +nightly doc -Zrustdoc-map -Z rustdoc-scrape-examples --workspace --all-features --no-deps --document-private-items
.PHONY: rustdoc-nightly-open
rustdoc-nightly-open:
@RUSTDOCFLAGS="--html-before-content ./.github/doc_extra.html" $(CARGOBIN) +nightly doc -Zrustdoc-map -Z rustdoc-scrape-examples --workspace --all-features --no-deps --document-private-items --open

329
README.md
View File

@ -1,329 +0,0 @@
# mailpot - mailing list manager
[![Latest Version]][crates.io]&nbsp;[![Coverage]][grcov-rport]&nbsp;[![docs.rs]][rustdoc]&nbsp;![Top Language]&nbsp;![License]
[Latest Version]: https://img.shields.io/crates/v/mailpot.svg?color=white
[crates.io]: https://crates.io/crates/mailpot
[Top Language]: https://img.shields.io/github/languages/top/meli/mailpot?color=white&logo=rust&logoColor=black
[License]: https://img.shields.io/github/license/meli/mailpot?color=white
[docs.rs]: https://img.shields.io/docsrs/mailpot?color=white
[rustdoc]: https://meli.github.io/mailpot/docs/mailpot/
[Coverage]: https://img.shields.io/endpoint?color=white&url=https://meli.github.io/mailpot/coverage/coverage.json
[grcov-rport]: https://meli.github.io/mailpot/coverage/
- Official hosted instance of `mailpot-web` crate: <https://lists.meli.delivery/>
- Rendered rustdoc: <https://meli.github.io/mailpot/docs/mailpot/>
- CLI manpage: [`mpot.1`](./docs/mpot.1) [Rendered](https://git.meli.delivery/meli/mailpot/src/branch/main/docs/mpot.1)
| Interested in contributing? Consult [`CONTRIBUTING.md`](./CONTRIBUTING.md). |
| --- |
## crates:
- `core` the library
- `cli` a command line tool to manage lists
- `web` an `axum` based web server capable of serving archives and authenticating list owners and members
- `archive-http` static web archive generation or with a dynamic http server
- `rest-http` a REST http server to manage lists
## Features
- easy setup
- extensible through Rust API as a [library](./core)
- basic management through [CLI tool](./cli/)
- optional lightweight web archiver ([static](./archive-http/) and [dynamic](./web/))
- useful for both **newsletters**, **communities** and for static **article comments**
## Roadmap
- extensible through HTTP REST API as an HTTP server, with webhooks
## Initial setup
Create a configuration file and a database:
```shell
$ mkdir -p /home/user/.config/mailpot
$ export MPOT_CONFIG=/home/user/.config/mailpot/config.toml
$ cargo run --bin mpot -- sample-config > "$MPOT_CONFIG"
$ # edit config and set database path e.g. "/home/user/.local/share/mailpot/mpot.db"
$ cargo run --bin mpot -- -c "$MPOT_CONFIG" list-lists
No lists found.
```
This creates the database file in the configuration file as if you executed the following:
```shell
$ sqlite3 /home/user/.local/share/mailpot/mpot.db < ./core/src/schema.sql
```
## Examples
```text
% mpot help
GNU Affero version 3 or later <https://www.gnu.org/licenses/>
Tool for mailpot mailing list management.
Usage: mpot [OPTIONS] <COMMAND>
Commands:
sample-config
Prints a sample config file to STDOUT
dump-database
Dumps database data to STDOUT
list-lists
Lists all registered mailing lists
list
Mailing list management
create-list
Create new list
post
Post message from STDIN to list
flush-queue
Flush outgoing e-mail queue
error-queue
Mail that has not been handled properly end up in the error queue
queue
Mail that has not been handled properly end up in the error queue
import-maildir
Import a maildir folder into an existing list
update-postfix-config
Update postfix maps and master.cf (probably needs root permissions)
print-postfix-config
Print postfix maps and master.cf entry to STDOUT
accounts
All Accounts
account-info
Account info
add-account
Add account
remove-account
Remove account
update-account
Update account info
repair
Show and fix possible data mistakes or inconsistencies
help
Print this message or the help of the given subcommand(s)
Options:
-d, --debug
Print logs
-c, --config <CONFIG>
Configuration file to use
-q, --quiet
Silence all output
-v, --verbose...
Verbose mode (-v, -vv, -vvv, etc)
-t, --ts <TS>
Debug log timestamp (sec, ms, ns, none)
-h, --help
Print help (see a summary with '-h')
-V, --version
Print version
```
### Receiving mail
```shell
$ cat list-request.eml | cargo run --bin mpot -- -vvvvvv post --dry-run
```
<details><summary>output</summary>
```shell
TRACE - Received envelope to post: Envelope {
Subject: "unsubscribe",
Date: "Tue, 04 Aug 2020 14:10:13 +0300",
From: [
Address::Mailbox {
display_name: "Mxxxx Pxxxxxxxxxxxx",
address_spec: "exxxxx@localhost",
},
],
To: [
Address::Mailbox {
display_name: "",
address_spec: "test-announce+request@localhost",
},
],
Message-ID: "<ejduu.fddf8sgen4j7@localhost>",
In-Reply-To: None,
References: None,
Hash: 12581897380059220314,
}
TRACE - unsubscribe action for addresses [Address::Mailbox { display_name: "Mxxxx Pxxxxxxxxxxxx", address_spec: "exxxxx@localhost" }] in list [#2 test-announce] test announcements <test-announce@localhost>
TRACE - Is post related to list [#1 test] Test list <test@localhost>? false
```
</details>
```shell
$ cat list-post.eml | cargo run --bin mpot -- -vvvvvv post --dry-run
```
<details><summary>output</summary>
```shell
TRACE - Received envelope to post: Envelope {
Subject: "[test-announce] new test releases",
Date: "Tue, 04 Aug 2020 14:10:13 +0300",
From: [
Address::Mailbox {
display_name: "Mxxxx Pxxxxxxxxxxxx",
address_spec: "exxxxx@localhost",
},
],
To: [
Address::Mailbox {
display_name: "",
address_spec: "test-announce@localhost",
},
],
Message-ID: "<ejduu.sddf8sgen4j7@localhost>",
In-Reply-To: None,
References: None,
Hash: 10220641455578979007,
}
TRACE - Is post related to list [#1 test] Test list <test@localhost>? false
TRACE - Is post related to list [#2 test-announce] test announcements <test-announce@localhost>? true
TRACE - Examining list "test announcements" <test-announce@localhost>
TRACE - List subscriptions [
ListSubscription {
list: 2,
address: "exxxxx@localhost",
name: None,
digest: false,
hide_address: false,
receive_duplicates: false,
receive_own_posts: true,
receive_confirmation: true,
enabled: true,
},
]
TRACE - Running FixCRLF filter
TRACE - Running PostRightsCheck filter
TRACE - Running AddListHeaders filter
TRACE - Running FinalizeRecipients filter
TRACE - examining subscription ListSubscription { list: 2, address: "exxxxx@localhost", name: None, digest: false, hide_address: false, receive_duplicates: false, receive_own_posts: true, receive_confirmation: true, enabled: true }
TRACE - subscription is submitter
TRACE - subscription gets copy
TRACE - result Ok(
Post {
list: MailingList {
pk: 2,
name: "test announcements",
id: "test-announce",
address: "test-announce@localhost",
description: None,
archive_url: None,
},
from: Address::Mailbox {
display_name: "Mxxxx Pxxxxxxxxxxxx",
address_spec: "exxxxx@localhost",
},
subscriptions: 1,
bytes: 851,
policy: None,
to: [
Address::Mailbox {
display_name: "",
address_spec: "test-announce@localhost",
},
],
action: Accept {
recipients: [
Address::Mailbox {
display_name: "",
address_spec: "exxxxx@localhost",
},
],
digests: [],
},
},
)
```
</details>
## Using `mailpot` as a library
```rust
use mailpot::{models::*, *};
use tempfile::TempDir;
let tmp_dir = TempDir::new().unwrap();
let db_path = tmp_dir.path().join("mpot.db");
let config = Configuration {
send_mail: SendMail::ShellCommand("/usr/bin/false".to_string()),
db_path: db_path.clone(),
data_path: tmp_dir.path().to_path_buf(),
administrators: vec!["myaddress@example.com".to_string()],
};
let db = Connection::open_or_create_db(config)?.trusted();
// Create a new mailing list
let list_pk = db.create_list(MailingList {
pk: 0,
name: "foobar chat".into(),
id: "foo-chat".into(),
address: "foo-chat@example.com".into(),
description: None,
topics: vec![],
archive_url: None,
})?.pk;
db.set_list_post_policy(
PostPolicy {
pk: 0,
list: list_pk,
announce_only: false,
subscription_only: true,
approval_needed: false,
open: false,
custom: false,
},
)?;
// Drop privileges; we can only process new e-mail and modify subscriptions from now on.
let mut db = db.untrusted();
assert_eq!(db.list_subscriptions(list_pk)?.len(), 0);
assert_eq!(db.list_posts(list_pk, None)?.len(), 0);
// Process a subscription request e-mail
let subscribe_bytes = b"From: Name <user@example.com>
To: <foo-chat+subscribe@example.com>
Subject: subscribe
Date: Thu, 29 Oct 2020 13:58:16 +0000
Message-ID: <1@example.com>
";
let envelope = melib::Envelope::from_bytes(subscribe_bytes, None)?;
db.post(&envelope, subscribe_bytes, /* dry_run */ false)?;
assert_eq!(db.list_subscriptions(list_pk)?.len(), 1);
assert_eq!(db.list_posts(list_pk, None)?.len(), 0);
// Process a post
let post_bytes = b"From: Name <user@example.com>
To: <foo-chat@example.com>
Subject: my first post
Date: Thu, 29 Oct 2020 14:01:09 +0000
Message-ID: <2@example.com>
Hello
";
let envelope =
melib::Envelope::from_bytes(post_bytes, None).expect("Could not parse message");
db.post(&envelope, post_bytes, /* dry_run */ false)?;
assert_eq!(db.list_subscriptions(list_pk)?.len(), 1);
assert_eq!(db.list_posts(list_pk, None)?.len(), 1);
# Ok::<(), Error>(())
```

View File

@ -0,0 +1,23 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="20" role="img" aria-label="coverage: 58%">
<title>coverage: 58%</title>
<linearGradient id="s" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="r">
<rect width="96" height="20" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#r)">
<rect width="61" height="20" fill="#555"/>
<rect x="61" width="35" height="20" fill="#e05d44"/>
<rect width="96" height="20" fill="url(#s)"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110">
<text aria-hidden="true" x="315" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text>
<text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text>
<text aria-hidden="true" x="775" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="250">58%</text>
<text x="775" y="140" transform="scale(.1)" fill="#fff" textLength="250">58%</text>
</g>
<script xmlns=""/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="20" role="img" aria-label="coverage: 58%">
<title>coverage: 58%</title>
<g shape-rendering="crispEdges">
<rect width="61" height="20" fill="#555"/>
<rect x="61" width="35" height="20" fill="#e05d44"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110">
<text x="315" y="140" transform="scale(.1)" fill="#fff" textLength="510">coverage</text>
<text x="775" y="140" transform="scale(.1)" fill="#fff" textLength="250">58%</text>
</g>
<script xmlns=""/>
</svg>

After

Width:  |  Height:  |  Size: 712 B

View File

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="142.5" height="28" role="img" aria-label="COVERAGE: 58%">
<title>COVERAGE: 58%</title>
<g shape-rendering="crispEdges">
<rect width="91" height="28" fill="#555"/>
<rect x="91" width="51.5" height="28" fill="#e05d44"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="100">
<text fill="#fff" x="455" y="175" transform="scale(.1)" textLength="670">COVERAGE</text>
<text fill="#fff" x="1167.5" y="175" font-weight="bold" transform="scale(.1)" textLength="275">58%</text>
</g>
<script xmlns=""/>
</svg>

After

Width:  |  Height:  |  Size: 739 B

View File

@ -0,0 +1,25 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="96" height="18" role="img" aria-label="coverage: 58%">
<title>coverage: 58%</title>
<linearGradient id="s" x2="0" y2="100%">
<stop offset="0" stop-color="#fff" stop-opacity=".7"/>
<stop offset=".1" stop-color="#aaa" stop-opacity=".1"/>
<stop offset=".9" stop-color="#000" stop-opacity=".3"/>
<stop offset="1" stop-color="#000" stop-opacity=".5"/>
</linearGradient>
<clipPath id="r">
<rect width="96" height="18" rx="4" fill="#fff"/>
</clipPath>
<g clip-path="url(#r)">
<rect width="61" height="18" fill="#555"/>
<rect x="61" width="35" height="18" fill="#e05d44"/>
<rect width="96" height="18" fill="url(#s)"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110">
<text aria-hidden="true" x="315" y="140" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="510">coverage</text>
<text x="315" y="130" transform="scale(.1)" fill="#fff" textLength="510">coverage</text>
<text aria-hidden="true" x="775" y="140" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="250">58%</text>
<text x="775" y="130" transform="scale(.1)" fill="#fff" textLength="250">58%</text>
</g>
<script xmlns=""/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,27 @@
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" width="99" height="20" role="img" aria-label="Coverage: 58%">
<title>Coverage: 58%</title>
<style>a:hover #llink{fill:url(#b);stroke:#ccc}a:hover #rlink{fill:#4183c4}</style>
<linearGradient id="a" x2="0" y2="100%">
<stop offset="0" stop-color="#fcfcfc" stop-opacity="0"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#ccc" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<g stroke="#d5d5d5">
<rect stroke="none" fill="#fcfcfc" x="0.5" y="0.5" width="61" height="19" rx="2"/>
<rect x="67.5" y="0.5" width="31" height="19" rx="2" fill="#fafafa"/>
<rect x="67" y="7.5" width="0.5" height="5" stroke="#fafafa"/>
<path d="M67.5 6.5 l-3 3v1 l3 3" stroke="d5d5d5" fill="#fafafa"/>
</g>
<g aria-hidden="true" fill="#333" text-anchor="middle" font-family="Helvetica Neue,Helvetica,Arial,sans-serif" text-rendering="geometricPrecision" font-weight="700" font-size="110px" line-height="14px">
<rect id="llink" stroke="#d5d5d5" fill="url(#a)" x=".5" y=".5" width="61" height="19" rx="2"/>
<text aria-hidden="true" x="305" y="150" fill="#fff" transform="scale(.1)" textLength="510">Coverage</text>
<text x="305" y="140" transform="scale(.1)" textLength="510">Coverage</text>
<text aria-hidden="true" x="825" y="150" fill="#fff" transform="scale(.1)" textLength="230">58%</text>
<text id="rlink" x="825" y="140" transform="scale(.1)" textLength="230">58%</text>
</g>
<script xmlns=""/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,196 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - core&#x2F;src&#x2F;db </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../../index.html">top_level</a></li><li class="is-active"><a href="#">core&#x2F;src&#x2F;db</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="759 / 1220">62.21 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="90 / 282">31.91 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-danger">
<abbr title="456 / 1392">32.76 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>File</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="policies.rs.html">policies.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="73.72262773722628"
max="100">
73.72%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
73.72%
</td>
<td class="has-text-centered has-background-danger p-2">
101 / 137
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">40%</td>
<td class="has-text-centered has-background-danger p-2">16 / 40 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">45.65%</td>
<td class="has-text-centered has-background-danger p-2">63 / 138</td>
</tr>
<tr>
<th><a href="posts.rs.html">posts.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="57.173913043478265"
max="100">
57.17%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
57.17%
</td>
<td class="has-text-centered has-background-danger p-2">
263 / 460
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">23.15%</td>
<td class="has-text-centered has-background-danger p-2">25 / 108 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">32.09%</td>
<td class="has-text-centered has-background-danger p-2">181 / 564</td>
</tr>
<tr>
<th><a href="queue.rs.html">queue.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-success is-large"
value="95.45454545454545"
max="100">
95.45%
</progress>
</td>
<td class="has-text-centered has-background-success p-2">
95.45%
</td>
<td class="has-text-centered has-background-success p-2">
168 / 176
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">60.42%</td>
<td class="has-text-centered has-background-danger p-2">29 / 48 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">52.17%</td>
<td class="has-text-centered has-background-danger p-2">72 / 138</td>
</tr>
<tr>
<th><a href="subscriptions.rs.html">subscriptions.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="49.421965317919074"
max="100">
49.42%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
49.42%
</td>
<td class="has-text-centered has-background-danger p-2">
171 / 346
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">21.88%</td>
<td class="has-text-centered has-background-danger p-2">14 / 64 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">24.11%</td>
<td class="has-text-centered has-background-danger p-2">108 / 448</td>
</tr>
<tr>
<th><a href="templates.rs.html">templates.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="55.44554455445545"
max="100">
55.45%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
55.45%
</td>
<td class="has-text-centered has-background-danger p-2">
56 / 101
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">27.27%</td>
<td class="has-text-centered has-background-danger p-2">6 / 22 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">30.77%</td>
<td class="has-text-centered has-background-danger p-2">32 / 104</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,277 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - core&#x2F;src </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../index.html">top_level</a></li><li class="is-active"><a href="#">core&#x2F;src</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="639 / 999">63.96 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="125 / 456">27.41 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-danger">
<abbr title="261 / 867">30.1 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>File</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="config.rs.html">config.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="28.57142857142857"
max="100">
28.57%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
28.57%
</td>
<td class="has-text-centered has-background-danger p-2">
10 / 35
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">23.53%</td>
<td class="has-text-centered has-background-danger p-2">8 / 34 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">34.09%</td>
<td class="has-text-centered has-background-danger p-2">15 / 44</td>
</tr>
<tr>
<th><a href="db.rs.html">db.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="64.84641638225256"
max="100">
64.85%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
64.85%
</td>
<td class="has-text-centered has-background-danger p-2">
190 / 293
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">48.57%</td>
<td class="has-text-centered has-background-danger p-2">34 / 70 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">31.08%</td>
<td class="has-text-centered has-background-danger p-2">124 / 399</td>
</tr>
<tr>
<th><a href="lib.rs.html">lib.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="25"
max="100">
25%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
25%
</td>
<td class="has-text-centered has-background-danger p-2">
1 / 4
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">9.09%</td>
<td class="has-text-centered has-background-danger p-2">1 / 11 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 6</td>
</tr>
<tr>
<th><a href="mail.rs.html">mail.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="66.66666666666666"
max="100">
66.67%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
66.67%
</td>
<td class="has-text-centered has-background-danger p-2">
28 / 42
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">20%</td>
<td class="has-text-centered has-background-danger p-2">6 / 30 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">23.53%</td>
<td class="has-text-centered has-background-danger p-2">16 / 68</td>
</tr>
<tr>
<th><a href="models.rs.html">models.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="61.63793103448276"
max="100">
61.64%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
61.64%
</td>
<td class="has-text-centered has-background-danger p-2">
143 / 232
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">24%</td>
<td class="has-text-centered has-background-danger p-2">54 / 225 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">12.34%</td>
<td class="has-text-centered has-background-danger p-2">19 / 154</td>
</tr>
<tr>
<th><a href="postfix.rs.html">postfix.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="70"
max="100">
70%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
70%
</td>
<td class="has-text-centered has-background-danger p-2">
203 / 290
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">27.08%</td>
<td class="has-text-centered has-background-danger p-2">13 / 48 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">45.88%</td>
<td class="has-text-centered has-background-danger p-2">78 / 170</td>
</tr>
<tr>
<th><a href="submission.rs.html">submission.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-success is-large"
value="90.9090909090909"
max="100">
90.91%
</progress>
</td>
<td class="has-text-centered has-background-success p-2">
90.91%
</td>
<td class="has-text-centered has-background-success p-2">
10 / 11
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">50%</td>
<td class="has-text-centered has-background-danger p-2">3 / 6 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">60%</td>
<td class="has-text-centered has-background-danger p-2">6 / 10</td>
</tr>
<tr>
<th><a href="templates.rs.html">templates.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="58.69565217391305"
max="100">
58.7%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
58.7%
</td>
<td class="has-text-centered has-background-danger p-2">
54 / 92
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">18.75%</td>
<td class="has-text-centered has-background-danger p-2">6 / 32 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">18.75%</td>
<td class="has-text-centered has-background-danger p-2">3 / 16</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - core&#x2F;src&#x2F;mail </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../../index.html">top_level</a></li><li class="is-active"><a href="#">core&#x2F;src&#x2F;mail</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="85 / 115">73.91 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="7 / 22">31.82 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-danger">
<abbr title="58 / 126">46.03 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>File</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="message_filters.rs.html">message_filters.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="73.91304347826086"
max="100">
73.91%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
73.91%
</td>
<td class="has-text-centered has-background-danger p-2">
85 / 115
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">31.82%</td>
<td class="has-text-centered has-background-danger p-2">7 / 22 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">46.03%</td>
<td class="has-text-centered has-background-danger p-2">58 / 126</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - core&#x2F;src&#x2F;models </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../../index.html">top_level</a></li><li class="is-active"><a href="#">core&#x2F;src&#x2F;models</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="0 / 38">0 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="0 / 48">0 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-success">
<abbr title="0 / 0">100 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>File</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="changesets.rs.html">changesets.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 38
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 48 </td>
<!-- -->
<td class="has-text-centered has-background-success p-2">100%</td>
<td class="has-text-centered has-background-success p-2">0 / 0</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
{"schemaVersion":1,"label":"coverage","message":"58.09%","color":"red"}

223
coverage/index.html 100644
View File

@ -0,0 +1,223 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - top_level </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li class="is-active"><a href="#">top_level</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="1799 / 3097">58.09 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="284 / 1438">19.75 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-danger">
<abbr title="871 / 2834">30.73 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>Directory</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="core&#x2F;src&#x2F;index.html">core&#x2F;src</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="63.96396396396396"
max="100">
63.96%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
63.96%
</td>
<td class="has-text-centered has-background-danger p-2">
639 / 999
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">27.41%</td>
<td class="has-text-centered has-background-danger p-2">125 / 456 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">30.1%</td>
<td class="has-text-centered has-background-danger p-2">261 / 867</td>
</tr>
<tr>
<th><a href="core&#x2F;src&#x2F;db&#x2F;index.html">core&#x2F;src&#x2F;db</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="62.21311475409836"
max="100">
62.21%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
62.21%
</td>
<td class="has-text-centered has-background-danger p-2">
759 / 1220
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">31.91%</td>
<td class="has-text-centered has-background-danger p-2">90 / 282 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">32.76%</td>
<td class="has-text-centered has-background-danger p-2">456 / 1392</td>
</tr>
<tr>
<th><a href="core&#x2F;src&#x2F;mail&#x2F;index.html">core&#x2F;src&#x2F;mail</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="73.91304347826086"
max="100">
73.91%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
73.91%
</td>
<td class="has-text-centered has-background-danger p-2">
85 / 115
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">31.82%</td>
<td class="has-text-centered has-background-danger p-2">7 / 22 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">46.03%</td>
<td class="has-text-centered has-background-danger p-2">58 / 126</td>
</tr>
<tr>
<th><a href="core&#x2F;src&#x2F;models&#x2F;index.html">core&#x2F;src&#x2F;models</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 38
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 48 </td>
<!-- -->
<td class="has-text-centered has-background-success p-2">100%</td>
<td class="has-text-centered has-background-success p-2">0 / 0</td>
</tr>
<tr>
<th><a href="mailpot-tests&#x2F;src&#x2F;index.html">mailpot-tests&#x2F;src</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="67.85714285714286"
max="100">
67.86%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
67.86%
</td>
<td class="has-text-centered has-background-danger p-2">
114 / 168
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">37.78%</td>
<td class="has-text-centered has-background-danger p-2">17 / 45 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">34.48%</td>
<td class="has-text-centered has-background-danger p-2">20 / 58</td>
</tr>
<tr>
<th><a href="web&#x2F;src&#x2F;index.html">web&#x2F;src</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="36.2657091561939"
max="100">
36.27%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
36.27%
</td>
<td class="has-text-centered has-background-danger p-2">
202 / 557
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">7.69%</td>
<td class="has-text-centered has-background-danger p-2">45 / 585 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">19.44%</td>
<td class="has-text-centered has-background-danger p-2">76 / 391</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - mailpot-tests&#x2F;src </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../index.html">top_level</a></li><li class="is-active"><a href="#">mailpot-tests&#x2F;src</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="114 / 168">67.86 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="17 / 45">37.78 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-danger">
<abbr title="20 / 58">34.48 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>File</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="lib.rs.html">lib.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="67.85714285714286"
max="100">
67.86%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
67.86%
</td>
<td class="has-text-centered has-background-danger p-2">
114 / 168
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">37.78%</td>
<td class="has-text-centered has-background-danger p-2">17 / 45 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">34.48%</td>
<td class="has-text-centered has-background-danger p-2">20 / 58</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,834 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - help.rs </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../index.html">top_level</a></li><li><a href="./index.html">web&#x2F;src</a></li><li class="is-active"><a href="#">help.rs</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="0 / 4">0 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="0 / 2">0 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-success">
<abbr title="0 / 0">100 %</abbr></p>
</div>
</div>
</nav>
<div role="table" aria-label="Coverage report"><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="1"
role="cell">
<a href="#1">1</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2">&#x2F;*</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="2"
role="cell">
<a href="#2">2</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * This file is part of mailpot</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="3"
role="cell">
<a href="#3">3</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> *</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="4"
role="cell">
<a href="#4">4</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * Copyright 2020 - Manos Pitsidianakis</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="5"
role="cell">
<a href="#5">5</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> *</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="6"
role="cell">
<a href="#6">6</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * This program is free software: you can redistribute it and&#x2F;or modify</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="7"
role="cell">
<a href="#7">7</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * it under the terms of the GNU Affero General Public License as</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="8"
role="cell">
<a href="#8">8</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * published by the Free Software Foundation, either version 3 of the</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="9"
role="cell">
<a href="#9">9</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * License, or (at your option) any later version.</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="10"
role="cell">
<a href="#10">10</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> *</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="11"
role="cell">
<a href="#11">11</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * This program is distributed in the hope that it will be useful,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="12"
role="cell">
<a href="#12">12</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="13"
role="cell">
<a href="#13">13</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="14"
role="cell">
<a href="#14">14</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * GNU Affero General Public License for more details.</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="15"
role="cell">
<a href="#15">15</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> *</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="16"
role="cell">
<a href="#16">16</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * You should have received a copy of the GNU Affero General Public License</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="17"
role="cell">
<a href="#17">17</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> * along with this program. If not, see &lt;https:&#x2F;&#x2F;www.gnu.org&#x2F;licenses&#x2F;&gt;.</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="18"
role="cell">
<a href="#18">18</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> *&#x2F;</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="19"
role="cell">
<a href="#19">19</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"></pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="20"
role="cell">
<a href="#20">20</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2">use super::*;</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="21"
role="cell">
<a href="#21">21</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"></pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="22"
role="cell">
<a href="#22">22</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2">&#x2F;&#x2F;&#x2F; Show help page.</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="23"
role="cell">
<a href="#23">23</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-danger-light has-background-danger"
role="cell" aria-label="0">
</div>
<div class="column has-background-danger-light p-0"
role="cell">
<pre class="has-background-danger-light py-0 px-2">pub async fn help(</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="24"
role="cell">
<a href="#24">24</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-danger-light has-background-danger"
role="cell" aria-label="0">
</div>
<div class="column has-background-danger-light p-0"
role="cell">
<pre class="has-background-danger-light py-0 px-2"> _: HelpPath,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="25"
role="cell">
<a href="#25">25</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> mut session: WritableSession,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="26"
role="cell">
<a href="#26">26</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> auth: AuthContext,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="27"
role="cell">
<a href="#27">27</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> State(state): State&lt;Arc&lt;AppState&gt;&gt;,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="28"
role="cell">
<a href="#28">28</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-danger-light has-background-danger"
role="cell" aria-label="0">
</div>
<div class="column has-background-danger-light p-0"
role="cell">
<pre class="has-background-danger-light py-0 px-2">) -&gt; Result&lt;Html&lt;String&gt;, ResponseError&gt; {</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="29"
role="cell">
<a href="#29">29</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> let crumbs = vec![</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="30"
role="cell">
<a href="#30">30</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> Crumb {</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="31"
role="cell">
<a href="#31">31</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> label: &quot;Home&quot;.into(),</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="32"
role="cell">
<a href="#32">32</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> url: &quot;&#x2F;&quot;.into(),</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="33"
role="cell">
<a href="#33">33</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> },</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="34"
role="cell">
<a href="#34">34</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> Crumb {</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="35"
role="cell">
<a href="#35">35</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> label: &quot;Help&quot;.into(),</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="36"
role="cell">
<a href="#36">36</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> url: HelpPath.to_crumb(),</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="37"
role="cell">
<a href="#37">37</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> },</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="38"
role="cell">
<a href="#38">38</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> ];</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="39"
role="cell">
<a href="#39">39</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> let context = minijinja::context! {</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="40"
role="cell">
<a href="#40">40</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> title =&gt; state.site_title.as_ref(),</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="41"
role="cell">
<a href="#41">41</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> page_title =&gt; &quot;Help &amp; Documentation&quot;,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="42"
role="cell">
<a href="#42">42</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> description =&gt; &quot;&quot;,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="43"
role="cell">
<a href="#43">43</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> root_url_prefix =&gt; &amp;state.root_url_prefix,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="44"
role="cell">
<a href="#44">44</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> current_user =&gt; auth.current_user,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="45"
role="cell">
<a href="#45">45</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> messages =&gt; session.drain_messages(),</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="46"
role="cell">
<a href="#46">46</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> crumbs =&gt; crumbs,</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="47"
role="cell">
<a href="#47">47</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> };</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="48"
role="cell">
<a href="#48">48</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-white has-background-white"
role="cell" aria-label="no coverage">
</div>
<div class="column has-background-white p-0"
role="cell">
<pre class="has-background-white py-0 px-2"> Ok(Html(TEMPLATES.get_template(&quot;help.html&quot;)?.render(context)?))</pre>
</div>
</div><div class="columns p-0 m-0" role="row">
<div
class="column is-1 is-narrow p-0 has-text-centered"
id="49"
role="cell">
<a href="#49">49</a>
</div>
<div
class="column is-1 is-narrow p-0 has-text-centered has-text-danger-light has-background-danger"
role="cell" aria-label="0">
</div>
<div class="column has-background-danger-light p-0"
role="cell">
<pre class="has-background-danger-light py-0 px-2">}</pre>
</div>
</div></div>
</div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,304 @@
<!DOCTYPE html>
<html lang="en-us">
<head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Grcov report - web&#x2F;src </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@0.9.1/css/bulma.min.css"></head>
<body>
<div class="container">
<nav class="breadcrumb is-right" aria-label="breadcrumbs">
<ul><li><a href="../../index.html">top_level</a></li><li class="is-active"><a href="#">web&#x2F;src</a></li>
</ul>
</nav>
<nav class="level">
<div class="level-item has-text-centered">
<div>
<p class="heading">Lines</p>
<p class="title has-text-danger">
<abbr title="202 / 557">36.27 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Functions</p>
<p class="title has-text-danger">
<abbr title="45 / 585">7.69 %</abbr></p>
</div>
</div>
<div class="level-item has-text-centered">
<div>
<p class="heading">Branches</p>
<p class="title has-text-danger">
<abbr title="76 / 391">19.44 %</abbr></p>
</div>
</div>
</nav>
<table class="table is-fullwidth">
<thead>
<tr>
<th>File</th>
<th class="has-text-centered" colspan="3">Line Coverage</th>
<th class="has-text-centered" colspan="2">Functions</th>
<th class="has-text-centered" colspan="2">Branches</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="auth.rs.html">auth.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="66.66666666666666"
max="100">
66.67%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
66.67%
</td>
<td class="has-text-centered has-background-danger p-2">
68 / 102
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">10.71%</td>
<td class="has-text-centered has-background-danger p-2">6 / 56 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">59.68%</td>
<td class="has-text-centered has-background-danger p-2">37 / 62</td>
</tr>
<tr>
<th><a href="cal.rs.html">cal.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-success is-large"
value="100"
max="100">
100%
</progress>
</td>
<td class="has-text-centered has-background-success p-2">
100%
</td>
<td class="has-text-centered has-background-success p-2">
113 / 113
</td>
<!-- -->
<td class="has-text-centered has-background-success p-2">90.91%</td>
<td class="has-text-centered has-background-success p-2">20 / 22 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">57.5%</td>
<td class="has-text-centered has-background-danger p-2">23 / 40</td>
</tr>
<tr>
<th><a href="help.rs.html">help.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 4
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 2 </td>
<!-- -->
<td class="has-text-centered has-background-success p-2">100%</td>
<td class="has-text-centered has-background-success p-2">0 / 0</td>
</tr>
<tr>
<th><a href="lib.rs.html">lib.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="2.3255813953488373"
max="100">
2.33%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
2.33%
</td>
<td class="has-text-centered has-background-danger p-2">
1 / 43
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">3.23%</td>
<td class="has-text-centered has-background-danger p-2">1 / 31 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 10</td>
</tr>
<tr>
<th><a href="lists.rs.html">lists.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 30
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 42 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 30</td>
</tr>
<tr>
<th><a href="minijinja_utils.rs.html">minijinja_utils.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="22.22222222222222"
max="100">
22.22%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
22.22%
</td>
<td class="has-text-centered has-background-danger p-2">
20 / 90
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">20.45%</td>
<td class="has-text-centered has-background-danger p-2">18 / 88 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">24.62%</td>
<td class="has-text-centered has-background-danger p-2">16 / 65</td>
</tr>
<tr>
<th><a href="settings.rs.html">settings.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 27
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 44 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 14</td>
</tr>
<tr>
<th><a href="typed_paths.rs.html">typed_paths.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 116
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 206 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 68</td>
</tr>
<tr>
<th><a href="utils.rs.html">utils.rs</a></th>
<!-- -->
<td class="p-2">
<progress
class="progress is-danger is-large"
value="0"
max="100">
0%
</progress>
</td>
<td class="has-text-centered has-background-danger p-2">
0%
</td>
<td class="has-text-centered has-background-danger p-2">
0 / 32
</td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 94 </td>
<!-- -->
<td class="has-text-centered has-background-danger p-2">0%</td>
<td class="has-text-centered has-background-danger p-2">0 / 102</td>
</tr>
</tbody>
</table></div>
<footer class="footer">
<div class="content has-text-centered">
<p class="heading">Date: 2023-04-25 09:59</p>
</div>
</footer>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

0
docs/.lock 100644
View File

1
docs/crates.js 100644
View File

@ -0,0 +1 @@
window.ALL_CRATES = ["mailpot","mailpot_web","mpot","mpot_gen","mpot_http","mpot_web"];

1
docs/help.html 100644
View File

@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Documentation for Rustdoc"><title>Rustdoc help</title><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceSerif4-Bold-a2c9cd1067f8b328.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="./static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><link rel="stylesheet" href="./static.files/normalize-76eba96aa4d2e634.css"><link rel="stylesheet" href="./static.files/rustdoc-c4dbdcde0fbd8430.css" id="mainThemeStyle"><link rel="stylesheet" id="themeStyle" href="./static.files/light-db279b6232be9c13.css"><link rel="stylesheet" disabled href="./static.files/dark-cf923f49f397b216.css"><link rel="stylesheet" disabled href="./static.files/ayu-be46fdc453a55015.css"><script src="./static.files/storage-3891ce972e3a2bf8.js"></script><script defer src="./static.files/main-98a684e84ae5b08b.js"></script><noscript><link rel="stylesheet" href="./static.files/noscript-13285aec31fa243e.css"></noscript><link rel="alternate icon" type="image/png" href="./static.files/favicon-16x16-8b506e7a72182f1c.png"><link rel="alternate icon" type="image/png" href="./static.files/favicon-32x32-422f7d1d52889060.png"><link rel="icon" type="image/svg+xml" href="./static.files/favicon-2c020d218678b618.svg"></head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="logo-container" href="./mpot_web/index.html"><img class="rust-logo" src="./static.files/rust-logo-151179464ae7ed46.svg" alt="logo"></a><h2></h2></nav><nav class="sidebar"><a class="logo-container" href="./mpot_web/index.html"><img class="rust-logo" src="./static.files/rust-logo-151179464ae7ed46.svg" alt="logo"></a><h2 class="location">Help</h2><div class="sidebar-elems"></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><span></span><input class="search-input" name="search" aria-label="Run search in the documentation" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="./help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1>Rustdoc help</h1><span class="out-of-band"><a id="back" href="javascript:void(0)" onclick="history.back();">Back</a></span></div><noscript><section><p>You need to enable Javascript to use keyboard commands or search.</p><p>For more information, browse the <a href="https://doc.rust-lang.org/rustdoc/">rustdoc handbook</a>.</p></section></noscript></section></div></main><div id="rustdoc-vars" data-root-path="./" data-static-root-path="./static.files/" data-current-crate="mpot_web" data-themes="" data-resource-suffix="" data-rustdoc-version="1.69.0 (84c898d65 2023-04-16)" data-search-js="search-8a59a8356673ec1f.js" data-settings-js="settings-f0c5c39777a9a2f6.js" data-settings-css="settings-0bcba95ff279c1db.css" ></div></body></html>

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,7 @@
(function() {var implementors = {
"mailpot":[],
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mailpot_web":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/trait.IntoResponse.html\" title=\"trait mailpot_web::IntoResponse\">IntoResponse</a> for <a class=\"struct\" href=\"mailpot_web/struct.ResponseError.html\" title=\"struct mailpot_web::ResponseError\">ResponseError</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListPath.html\" title=\"struct mailpot_web::typed_paths::ListPath\">ListPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListPostPath.html\" title=\"struct mailpot_web::typed_paths::ListPostPath\">ListPostPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListSettingsPath.html\" title=\"struct mailpot_web::typed_paths::ListSettingsPath\">ListSettingsPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListEditSubscribersPath.html\" title=\"struct mailpot_web::typed_paths::ListEditSubscribersPath\">ListEditSubscribersPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.LogoutPath.html\" title=\"struct mailpot_web::typed_paths::LogoutPath\">LogoutPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListEditCandidatesPath.html\" title=\"struct mailpot_web::typed_paths::ListEditCandidatesPath\">ListEditCandidatesPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.HelpPath.html\" title=\"struct mailpot_web::typed_paths::HelpPath\">HelpPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.LoginPath.html\" title=\"struct mailpot_web::typed_paths::LoginPath\">LoginPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.SettingsPath.html\" title=\"struct mailpot_web::typed_paths::SettingsPath\">SettingsPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/trait.TypedPath.html\" title=\"trait mailpot_web::TypedPath\">TypedPath</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListEditPath.html\" title=\"struct mailpot_web::typed_paths::ListEditPath\">ListEditPath</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/trait.AuthUser.html\" title=\"trait mailpot_web::AuthUser\">AuthUser</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.i64.html\">i64</a>, <a class=\"enum\" href=\"mailpot_web/auth/enum.Role.html\" title=\"enum mailpot_web::auth::Role\">Role</a>&gt; for <a class=\"struct\" href=\"mailpot_web/auth/struct.User.html\" title=\"struct mailpot_web::auth::User\">User</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mailpot_web":[["impl UserStore&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.i64.html\">i64</a>, <a class=\"enum\" href=\"mailpot_web/auth/enum.Role.html\" title=\"enum mailpot_web::auth::Role\">Role</a>&gt; for <a class=\"struct\" href=\"mailpot_web/melib/smallvec/alloc/sync/struct.Arc.html\" title=\"struct mailpot_web::melib::smallvec::alloc::sync::Arc\">Arc</a>&lt;<a class=\"struct\" href=\"mailpot_web/struct.AppState.html\" title=\"struct mailpot_web::AppState\">AppState</a>&gt;<span class=\"where fmt-newline\">where\n <a class=\"struct\" href=\"mailpot_web/auth/struct.User.html\" title=\"struct mailpot_web::auth::User\">User</a>: <a class=\"trait\" href=\"mailpot_web/trait.AuthUser.html\" title=\"trait mailpot_web::AuthUser\">AuthUser</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.i64.html\">i64</a>, <a class=\"enum\" href=\"mailpot_web/auth/enum.Role.html\" title=\"enum mailpot_web::auth::Role\">Role</a>&gt;,</span>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mpot":[["impl <a class=\"trait\" href=\"mpot/args/trait.Args.html\" title=\"trait mpot::args::Args\">Args</a> for <a class=\"struct\" href=\"mpot/args/struct.PostfixConfig.html\" title=\"struct mpot::args::PostfixConfig\">PostfixConfig</a>"],["impl <a class=\"trait\" href=\"mpot/args/trait.Args.html\" title=\"trait mpot::args::Args\">Args</a> for <a class=\"struct\" href=\"mpot/args/struct.AccountOptions.html\" title=\"struct mpot::args::AccountOptions\">AccountOptions</a>"],["impl <a class=\"trait\" href=\"mpot/args/trait.Args.html\" title=\"trait mpot::args::Args\">Args</a> for <a class=\"struct\" href=\"mpot/args/struct.SubscriptionOptions.html\" title=\"struct mpot::args::SubscriptionOptions\">SubscriptionOptions</a>"],["impl <a class=\"trait\" href=\"mpot/args/trait.Args.html\" title=\"trait mpot::args::Args\">Args</a> for <a class=\"struct\" href=\"mpot/args/struct.Opt.html\" title=\"struct mpot::args::Opt\">Opt</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mpot":[["impl <a class=\"trait\" href=\"mpot/args/trait.CommandFactory.html\" title=\"trait mpot::args::CommandFactory\">CommandFactory</a> for <a class=\"struct\" href=\"mpot/args/struct.Opt.html\" title=\"struct mpot::args::Opt\">Opt</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mpot":[["impl FromArgMatches for <a class=\"struct\" href=\"mpot/args/struct.PostfixConfig.html\" title=\"struct mpot::args::PostfixConfig\">PostfixConfig</a>"],["impl FromArgMatches for <a class=\"enum\" href=\"mpot/args/enum.Command.html\" title=\"enum mpot::args::Command\">Command</a>"],["impl FromArgMatches for <a class=\"enum\" href=\"mpot/args/enum.ErrorQueueCommand.html\" title=\"enum mpot::args::ErrorQueueCommand\">ErrorQueueCommand</a>"],["impl FromArgMatches for <a class=\"struct\" href=\"mpot/args/struct.SubscriptionOptions.html\" title=\"struct mpot::args::SubscriptionOptions\">SubscriptionOptions</a>"],["impl FromArgMatches for <a class=\"struct\" href=\"mpot/args/struct.Opt.html\" title=\"struct mpot::args::Opt\">Opt</a>"],["impl FromArgMatches for <a class=\"enum\" href=\"mpot/args/enum.ListCommand.html\" title=\"enum mpot::args::ListCommand\">ListCommand</a>"],["impl FromArgMatches for <a class=\"struct\" href=\"mpot/args/struct.AccountOptions.html\" title=\"struct mpot::args::AccountOptions\">AccountOptions</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mpot":[["impl <a class=\"trait\" href=\"mpot/args/trait.Parser.html\" title=\"trait mpot::args::Parser\">Parser</a> for <a class=\"struct\" href=\"mpot/args/struct.Opt.html\" title=\"struct mpot::args::Opt\">Opt</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,3 @@
(function() {var implementors = {
"mpot":[["impl <a class=\"trait\" href=\"mpot/args/trait.Subcommand.html\" title=\"trait mpot::args::Subcommand\">Subcommand</a> for <a class=\"enum\" href=\"mpot/args/enum.ErrorQueueCommand.html\" title=\"enum mpot::args::ErrorQueueCommand\">ErrorQueueCommand</a>"],["impl <a class=\"trait\" href=\"mpot/args/trait.Subcommand.html\" title=\"trait mpot::args::Subcommand\">Subcommand</a> for <a class=\"enum\" href=\"mpot/args/enum.ListCommand.html\" title=\"enum mpot::args::ListCommand\">ListCommand</a>"],["impl <a class=\"trait\" href=\"mpot/args/trait.Subcommand.html\" title=\"trait mpot::args::Subcommand\">Subcommand</a> for <a class=\"enum\" href=\"mpot/args/enum.Command.html\" title=\"enum mpot::args::Command\">Command</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,7 @@
(function() {var implementors = {
"mailpot":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot/models/struct.Post.html\" title=\"struct mailpot::models::Post\">Post</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot/templates/struct.Template.html\" title=\"struct mailpot::templates::Template\">Template</a>"],["impl&lt;T: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a>&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot/models/struct.DbVal.html\" title=\"struct mailpot::models::DbVal\">DbVal</a>&lt;T&gt;"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot/models/struct.MailingList.html\" title=\"struct mailpot::models::MailingList\">MailingList</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"mailpot/db/queue/enum.Queue.html\" title=\"enum mailpot::db::queue::Queue\">Queue</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot/models/struct.Account.html\" title=\"struct mailpot::models::Account\">Account</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"mailpot/mail/enum.ListRequest.html\" title=\"enum mailpot::mail::ListRequest\">ListRequest</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/cmp/trait.Eq.html\" title=\"trait core::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot/db/queue/struct.QueueEntry.html\" title=\"struct mailpot::db::queue::QueueEntry\">QueueEntry</a>"]],
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListPostPath.html\" title=\"struct mailpot_web::typed_paths::ListPostPath\">ListPostPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.HelpPath.html\" title=\"struct mailpot_web::typed_paths::HelpPath\">HelpPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListSettingsPath.html\" title=\"struct mailpot_web::typed_paths::ListSettingsPath\">ListSettingsPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListEditCandidatesPath.html\" title=\"struct mailpot_web::typed_paths::ListEditCandidatesPath\">ListEditCandidatesPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.LogoutPath.html\" title=\"struct mailpot_web::typed_paths::LogoutPath\">LogoutPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"mailpot_web/auth/enum.Role.html\" title=\"enum mailpot_web::auth::Role\">Role</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.Crumb.html\" title=\"struct mailpot_web::utils::Crumb\">Crumb</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.LoginPath.html\" title=\"struct mailpot_web::typed_paths::LoginPath\">LoginPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.IntPOST.html\" title=\"struct mailpot_web::utils::IntPOST\">IntPOST</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.BoolPOST.html\" title=\"struct mailpot_web::utils::BoolPOST\">BoolPOST</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"enum\" href=\"mailpot_web/typed_paths/enum.ListPathIdentifier.html\" title=\"enum mailpot_web::typed_paths::ListPathIdentifier\">ListPathIdentifier</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/minijinja_utils/struct.MailingList.html\" title=\"struct mailpot_web::minijinja_utils::MailingList\">MailingList</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListEditPath.html\" title=\"struct mailpot_web::typed_paths::ListEditPath\">ListEditPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListPath.html\" title=\"struct mailpot_web::typed_paths::ListPath\">ListPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListEditSubscribersPath.html\" title=\"struct mailpot_web::typed_paths::ListEditSubscribersPath\">ListEditSubscribersPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.SettingsPath.html\" title=\"struct mailpot_web::typed_paths::SettingsPath\">SettingsPath</a>"]],
"mpot":[],
"mpot_gen":[["impl <a class=\"trait\" href=\"mpot_gen/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mpot_gen::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mpot_gen/utils/struct.Crumb.html\" title=\"struct mpot_gen::utils::Crumb\">Crumb</a>"],["impl <a class=\"trait\" href=\"mpot_gen/melib/nom/lib/std/cmp/trait.Eq.html\" title=\"trait mpot_gen::melib::nom::lib::std::cmp::Eq\">Eq</a> for <a class=\"struct\" href=\"mpot_gen/utils/struct.MailingList.html\" title=\"struct mpot_gen::utils::MailingList\">MailingList</a>"]],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.PartialOrd.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::PartialOrd\">PartialOrd</a>&lt;<a class=\"struct\" href=\"mailpot_web/utils/struct.IntPOST.html\" title=\"struct mailpot_web::utils::IntPOST\">IntPOST</a>&gt; for <a class=\"struct\" href=\"mailpot_web/utils/struct.IntPOST.html\" title=\"struct mailpot_web::utils::IntPOST\">IntPOST</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.PartialOrd.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::PartialOrd\">PartialOrd</a>&lt;<a class=\"struct\" href=\"mailpot_web/utils/struct.BoolPOST.html\" title=\"struct mailpot_web::utils::BoolPOST\">BoolPOST</a>&gt; for <a class=\"struct\" href=\"mailpot_web/utils/struct.BoolPOST.html\" title=\"struct mailpot_web::utils::BoolPOST\">BoolPOST</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/cmp/trait.PartialOrd.html\" title=\"trait mailpot_web::melib::nom::lib::std::cmp::PartialOrd\">PartialOrd</a>&lt;<a class=\"enum\" href=\"mailpot_web/auth/enum.Role.html\" title=\"enum mailpot_web::auth::Role\">Role</a>&gt; for <a class=\"enum\" href=\"mailpot_web/auth/enum.Role.html\" title=\"enum mailpot_web::auth::Role\">Role</a>"]],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"],["impl <a class=\"trait\" href=\"mpot_http/melib/nom/lib/std/convert/trait.AsRef.html\" title=\"trait mpot_http::melib::nom::lib::std::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mpot_http/struct.__StaticPath.html\" title=\"struct mpot_http::__StaticPath\">__StaticPath</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,7 @@
(function() {var implementors = {
"mailpot":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;Error&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"https://docs.rs/serde_json/1.0.95/serde_json/error/struct.Error.html\" title=\"struct serde_json::error::Error\">Error</a>&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"enum\" href=\"mailpot/errors/enum.ErrorKind.html\" title=\"enum mailpot::errors::ErrorKind\">ErrorKind</a>&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>&gt; for <a class=\"enum\" href=\"mailpot/errors/enum.ErrorKind.html\" title=\"enum mailpot::errors::ErrorKind\">ErrorKind</a>"],["impl&lt;'a&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;&amp;'a <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"enum\" href=\"mailpot/errors/enum.ErrorKind.html\" title=\"enum mailpot::errors::ErrorKind\">ErrorKind</a>"],["impl&lt;'a&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;&amp;'a <a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"https://docs.rs/anyhow/1.0.70/anyhow/struct.Error.html\" title=\"struct anyhow::Error\">Error</a>&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;Error&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"mailpot/models/struct.ListOwner.html\" title=\"struct mailpot::models::ListOwner\">ListOwner</a>&gt; for <a class=\"struct\" href=\"mailpot/models/struct.ListSubscription.html\" title=\"struct mailpot::models::ListSubscription\">ListSubscription</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;Error&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html\" title=\"struct alloc::string::String\">String</a>&gt; for <a class=\"enum\" href=\"mailpot/errors/enum.ErrorKind.html\" title=\"enum mailpot::errors::ErrorKind\">ErrorKind</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/1.69.0/std/io/error/struct.Error.html\" title=\"struct std::io::error::Error\">Error</a>&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.From.html\" title=\"trait core::convert::From\">From</a>&lt;<a class=\"struct\" href=\"https://doc.rust-lang.org/1.69.0/alloc/string/struct.String.html\" title=\"struct alloc::string::String\">String</a>&gt; for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"]],
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/convert/trait.From.html\" title=\"trait mailpot_web::melib::nom::lib::std::convert::From\">From</a>&lt;<a class=\"struct\" href=\"mailpot_web/models/struct.DbVal.html\" title=\"struct mailpot_web::models::DbVal\">DbVal</a>&lt;<a class=\"struct\" href=\"mailpot_web/models/struct.MailingList.html\" title=\"struct mailpot_web::models::MailingList\">MailingList</a>&gt;&gt; for <a class=\"struct\" href=\"mailpot_web/minijinja_utils/struct.MailingList.html\" title=\"struct mailpot_web::minijinja_utils::MailingList\">MailingList</a>"],["impl&lt;E: <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/convert/trait.Into.html\" title=\"trait mailpot_web::melib::nom::lib::std::convert::Into\">Into</a>&lt;<a class=\"struct\" href=\"mailpot_web/melib/nom/lib/std/boxed/struct.Box.html\" title=\"struct mailpot_web::melib::nom::lib::std::boxed::Box\">Box</a>&lt;dyn <a class=\"trait\" href=\"mailpot_web/serde/ser/trait.StdError.html\" title=\"trait mailpot_web::serde::ser::StdError\">Error</a>&gt;&gt;&gt; <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/convert/trait.From.html\" title=\"trait mailpot_web::melib::nom::lib::std::convert::From\">From</a>&lt;E&gt; for <a class=\"struct\" href=\"mailpot_web/struct.ResponseError.html\" title=\"struct mailpot_web::ResponseError\">ResponseError</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/convert/trait.From.html\" title=\"trait mailpot_web::melib::nom::lib::std::convert::From\">From</a>&lt;<a class=\"struct\" href=\"mailpot_web/melib/nom/lib/std/string/struct.String.html\" title=\"struct mailpot_web::melib::nom::lib::std::string::String\">String</a>&gt; for <a class=\"enum\" href=\"mailpot_web/typed_paths/enum.ListPathIdentifier.html\" title=\"enum mailpot_web::typed_paths::ListPathIdentifier\">ListPathIdentifier</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/convert/trait.From.html\" title=\"trait mailpot_web::melib::nom::lib::std::convert::From\">From</a>&lt;&amp;<a class=\"struct\" href=\"mailpot_web/models/struct.DbVal.html\" title=\"struct mailpot_web::models::DbVal\">DbVal</a>&lt;<a class=\"struct\" href=\"mailpot_web/models/struct.MailingList.html\" title=\"struct mailpot_web::models::MailingList\">MailingList</a>&gt;&gt; for <a class=\"struct\" href=\"mailpot_web/typed_paths/struct.ListPath.html\" title=\"struct mailpot_web::typed_paths::ListPath\">ListPath</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/convert/trait.From.html\" title=\"trait mailpot_web::melib::nom::lib::std::convert::From\">From</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.i64.html\">i64</a>&gt; for <a class=\"enum\" href=\"mailpot_web/typed_paths/enum.ListPathIdentifier.html\" title=\"enum mailpot_web::typed_paths::ListPathIdentifier\">ListPathIdentifier</a>"]],
"mpot":[],
"mpot_gen":[["impl <a class=\"trait\" href=\"mpot_gen/melib/nom/lib/std/convert/trait.From.html\" title=\"trait mpot_gen::melib::nom::lib::std::convert::From\">From</a>&lt;<a class=\"struct\" href=\"mpot_gen/models/struct.DbVal.html\" title=\"struct mpot_gen::models::DbVal\">DbVal</a>&lt;<a class=\"struct\" href=\"mpot_gen/models/struct.MailingList.html\" title=\"struct mpot_gen::models::MailingList\">MailingList</a>&gt;&gt; for <a class=\"struct\" href=\"mpot_gen/utils/struct.MailingList.html\" title=\"struct mpot_gen::utils::MailingList\">MailingList</a>"]],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,7 @@
(function() {var implementors = {
"mailpot":[["impl&lt;S: <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.AsRef.html\" title=\"trait core::convert::AsRef\">AsRef</a>&lt;<a class=\"primitive\" href=\"https://doc.rust-lang.org/1.69.0/std/primitive.str.html\">str</a>&gt;&gt; <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/convert/trait.TryFrom.html\" title=\"trait core::convert::TryFrom\">TryFrom</a>&lt;(S, &amp;Envelope)&gt; for <a class=\"enum\" href=\"mailpot/mail/enum.ListRequest.html\" title=\"enum mailpot::mail::ListRequest\">ListRequest</a>"]],
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,4 @@
(function() {var implementors = {
"mailpot":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot/models/changesets/struct.ListOwnerChangeset.html\" title=\"struct mailpot::models::changesets::ListOwnerChangeset\">ListOwnerChangeset</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot/models/changesets/struct.MailingListChangeset.html\" title=\"struct mailpot::models::changesets::MailingListChangeset\">MailingListChangeset</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot/postfix/struct.PostfixConfiguration.html\" title=\"struct mailpot::postfix::PostfixConfiguration\">PostfixConfiguration</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot/models/changesets/struct.ListSubscriptionChangeset.html\" title=\"struct mailpot::models::changesets::ListSubscriptionChangeset\">ListSubscriptionChangeset</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot/models/changesets/struct.AccountChangeset.html\" title=\"struct mailpot::models::changesets::AccountChangeset\">AccountChangeset</a>"]],
"mailpot_web":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot_web/auth/struct.AuthFormPayload.html\" title=\"struct mailpot_web::auth::AuthFormPayload\">AuthFormPayload</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot_web/settings/struct.SubscriptionFormPayload.html\" title=\"struct mailpot_web::settings::SubscriptionFormPayload\">SubscriptionFormPayload</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"enum\" href=\"mailpot_web/utils/enum.Level.html\" title=\"enum mailpot_web::utils::Level\">Level</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot_web/auth/struct.SshSignature.html\" title=\"struct mailpot_web::auth::SshSignature\">SshSignature</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.BoolPOST.html\" title=\"struct mailpot_web::utils::BoolPOST\">BoolPOST</a>"]]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,7 @@
(function() {var implementors = {
"mailpot":[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/1.69.0/core/error/trait.Error.html\" title=\"trait core::error::Error\">Error</a> for <a class=\"struct\" href=\"mailpot/errors/struct.Error.html\" title=\"struct mailpot::errors::Error\">Error</a>"]],
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/hash/trait.Hash.html\" title=\"trait mailpot_web::melib::nom::lib::std::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.Message.html\" title=\"struct mailpot_web::utils::Message\">Message</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/hash/trait.Hash.html\" title=\"trait mailpot_web::melib::nom::lib::std::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.IntPOST.html\" title=\"struct mailpot_web::utils::IntPOST\">IntPOST</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/hash/trait.Hash.html\" title=\"trait mailpot_web::melib::nom::lib::std::hash::Hash\">Hash</a> for <a class=\"struct\" href=\"mailpot_web/utils/struct.BoolPOST.html\" title=\"struct mailpot_web::utils::BoolPOST\">BoolPOST</a>"],["impl <a class=\"trait\" href=\"mailpot_web/melib/nom/lib/std/hash/trait.Hash.html\" title=\"trait mailpot_web::melib::nom::lib::std::hash::Hash\">Hash</a> for <a class=\"enum\" href=\"mailpot_web/utils/enum.Level.html\" title=\"enum mailpot_web::utils::Level\">Level</a>"]],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

View File

@ -0,0 +1,6 @@
(function() {var implementors = {
"mailpot_web":[],
"mpot":[],
"mpot_gen":[],
"mpot_http":[]
};if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()

Some files were not shown because too many files have changed in this diff Show More