diff options
Diffstat (limited to 'pkgs/by-name/ba/back/src/web/prefix.rs')
-rw-r--r-- | pkgs/by-name/ba/back/src/web/prefix.rs | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/pkgs/by-name/ba/back/src/web/prefix.rs b/pkgs/by-name/ba/back/src/web/prefix.rs new file mode 100644 index 0000000..5143799 --- /dev/null +++ b/pkgs/by-name/ba/back/src/web/prefix.rs @@ -0,0 +1,35 @@ +// Back - An extremely simple git issue tracking system. Inspired by tvix's +// panettone +// +// Copyright (C) 2024 Benedikt Peetz <benedikt.peetz@b-peetz.de> +// SPDX-License-Identifier: AGPL-3.0-or-later +// +// This file is part of Back. +// +// You should have received a copy of the License along with this program. +// If not, see <https://www.gnu.org/licenses/agpl.txt>. + +use std::fmt::Display; + +use gix::hash::Prefix; +use rocket::request::FromParam; + +#[derive(Debug)] +pub struct BackPrefix { + prefix: Prefix, +} +impl Display for BackPrefix { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.prefix.fmt(f) + } +} + +impl<'a> FromParam<'a> for BackPrefix { + type Error = gix::hash::prefix::from_hex::Error; + + fn from_param(param: &'a str) -> Result<Self, Self::Error> { + let prefix = Prefix::from_hex(param)?; + + Ok(Self { prefix }) + } +} |