/* * Copyright 2024 Luca Fulchir * * Licensed under the Apache License, Version 2.0 with LLVM exception (the * "License"); you may not use this file except in compliance with the * License. You may obtain a copy of the License and of the exception at * * http://www.apache.org/licenses/LICENSE-2.0 * https://spdx.org/licenses/LLVM-exception.html * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //! //! Example of two package repositories, where one //! extends ancd changes another // Export multiple packages in this module use ::bok::repository; ::bok::moduse! { one, two, three, } /// /// Base repository with some packages #[::bok::repository(::bok::RepositoryEmpty)] #[derive(::std::default::Default)] pub struct Pkgs1 {} // Add some packages to the repository // all packages will have `::default()` values bok::repo_packages! { Pkgs1 { One, Two, } } /// /// This repository extends and changes Pkgs1 #[::bok::repository(Pkgs1)] #[derive(::std::default::Default)] pub struct Pkgs2 {} // add a third package with `::default()` values bok::repo_packages! { Pkgs1 { Three, } } impl Pkgs2 { /// override the package `two` options from the base repostiory (Pkgs1) pub fn two(&self) -> Two { use ::bok::PkgBuilder; let pkg: Box = Two::builder() .my_attr(42) .build() .expect("Can't build package Two"); let two = pkg.as_any().downcast_ref::().unwrap(); two.clone() } }