/* * 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 package /// Automatically implements `.builder().my_attr(42).build()` pattern #[::bok::package(::bok::PkgEmpty)] #[::bok::deps()] pub struct One { #[option] my_attr: u32, } // TODO: move this into the PkgBuilder // and have the package reference the builder #[::bok::package_impl] impl ::std::default::Default for One { fn default() -> Self { One { _bok_base: ::std::marker::PhantomData::default(), _bok_repo: ::std::marker::PhantomData::default(), my_attr: 1, version: ::bok::Version { major: 0, minor: 0, patch: 1, pre: ::bok::Prerelease::EMPTY, build: ::bok::BuildMetadata::EMPTY, }, } } } #[::bok::package_impl] impl ::bok::Pkg for One { fn build(&self) -> ::core::result::Result<(), ()> { ::core::result::Result::Ok(()) } } #[::bok::package_impl] impl ::bok::PkgBuilder for One { fn set_dependencies( &self, repo: ::std::sync::Arc, _build: ::bok::deps::Build, _runtime: ::bok::deps::Runtime, _test: ::bok::deps::Test, ) -> Result<(), ()> { /* //TODO: automatically add repo type conversion via macro let repo_any = repo.as_any(); let Some(actual_repo) = repo_any.downcast_ref::() else { return Err(()); }; */ Ok(()) } }