diff options
Diffstat (limited to 'pkgs/by-name/ba/back/src/git_bug/issue/entity')
-rw-r--r-- | pkgs/by-name/ba/back/src/git_bug/issue/entity/mod.rs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/pkgs/by-name/ba/back/src/git_bug/issue/entity/mod.rs b/pkgs/by-name/ba/back/src/git_bug/issue/entity/mod.rs new file mode 100644 index 0000000..f2e9af0 --- /dev/null +++ b/pkgs/by-name/ba/back/src/git_bug/issue/entity/mod.rs @@ -0,0 +1,78 @@ +// 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::Repository; +use serde::Deserialize; +use serde_json::Value; + +use super::{ + identity::{Author, RawAuthor}, + operation::Operation, +}; + +#[derive(Deserialize, Debug, PartialEq, Eq, Clone)] +#[serde(from = "Value")] +pub struct Id { + value: String, +} +impl From<Value> for Id { + fn from(value: Value) -> Self { + Self::from(&value) + } +} +impl From<&Value> for Id { + fn from(value: &Value) -> Self { + Self { + value: value.as_str().expect("This should be a string").to_owned(), + } + } +} +impl From<gix::Id<'_>> for Id { + fn from(value: gix::Id<'_>) -> Self { + Self { + value: value.shorten().expect("This should work?").to_string(), + } + } +} +impl Display for Id { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.value.fmt(f) + // let shortend = self.value.shorten().expect("This should work."); + // f.write_str(shortend.to_string().as_str()) + } +} + +#[derive(Debug)] +pub struct Entity { + pub id: Id, + pub author: Author, + pub operations: Vec<Operation>, +} + +impl Entity { + pub fn from_raw<'a>(repo: &'a Repository, raw: RawEntity, id: gix::Id<'a>) -> Self { + Self { + id: Id::from(id), + author: Author::construct(repo, raw.author), + operations: raw.operations, + } + } +} + +#[derive(Deserialize)] +pub struct RawEntity { + pub author: RawAuthor, + + #[serde(alias = "ops")] + pub operations: Vec<Operation>, +} |