libcnb_package/
buildpack_kind.rs

1use libcnb_common::toml_file::read_toml_file;
2use libcnb_data::buildpack::BuildpackDescriptor;
3use std::path::Path;
4
5#[must_use]
6pub(crate) fn determine_buildpack_kind(buildpack_dir: &Path) -> Option<BuildpackKind> {
7    read_toml_file::<BuildpackDescriptor>(buildpack_dir.join("buildpack.toml"))
8        .ok()
9        .map(|buildpack_descriptor| match buildpack_descriptor {
10            BuildpackDescriptor::Component(_) => {
11                if buildpack_dir.join("Cargo.toml").is_file() {
12                    BuildpackKind::LibCnbRs
13                } else {
14                    BuildpackKind::Other
15                }
16            }
17            BuildpackDescriptor::Composite(_) => BuildpackKind::Composite,
18        })
19}
20
21pub(crate) enum BuildpackKind {
22    Composite,
23    LibCnbRs,
24    Other,
25}