// rocie - An enterprise grocery management system // // Copyright (C) 2026 Benedikt Peetz // SPDX-License-Identifier: GPL-3.0-or-later // // This file is part of Rocie. // // You should have received a copy of the License along with this program. // If not, see . use serde::{Deserialize, Serialize}; use utoipa::ToSchema; use crate::storage::sql::mk_id; /// The grouping system for recipes. /// /// Every recipe can have a related parent, and every parent can have a parent themselves. /// As such, the recipe list constructs a DAG. #[derive(Clone, ToSchema, Serialize, Deserialize)] pub(crate) struct RecipeParent { /// The id of the recipe parent. pub(crate) id: RecipeParentId, /// The optional id of the parent of this recipe parent. /// /// This must not form a cycle. #[schema(nullable = false)] pub(crate) parent: Option, /// The name of the recipe parent. /// /// This should be globally unique, to make searching easier for the user. pub(crate) name: String, /// An optional description of this recipe parent. #[schema(nullable = false)] pub(super) description: Option, } mk_id!(RecipeParentId and RecipeParentIdStub);