bottlerocket-os/twoliter

buildsys: validate manifest metadata when deserializing

開放

#273 建立於 2024年6月6日

 (0 則留言) (0 個反應) (0 位負責人)Rust (43 個分叉)auto 404
good first issue

倉庫指標

星標
 (34 顆星)
PR 合併指標
 (平均合併 4天 18小時) (30 天內合併 19 個 PR)

描述

The ManifestInfo type deserializes certain sections from Cargo.toml

  • package.metadata.build-package
  • package.metadata.build-kit
  • package.metadata.build-variant

Currently the differences between build-package, build-kit and build-variant is not constrained by an enum. This leads to a lot of "late binding" errors if an expected field is missing. Instead a different type for each of these should be created. For example:

struct BuildPackageInfo { }
struct BuildKitInfo { }
struct BuildVariantInfo { }

enum BuildsysMetadata {
    Package(BuildPackageInfo),
    Kit(BuildKitInfo),
    Variant(BuildVariantInfo),
}

If serde is used correctly with this structure, then missing information will cause an error at deserialization time and get rid of Options and errors downstream when fields are being accessed.


          We should create an issue, if we don't have one already, for deserializing these manifest metadata sections with Serde in a validating manner. We should catch these errors earlier.

Originally posted by @webern in https://github.com/bottlerocket-os/twoliter/pull/271#discussion_r1628513941

貢獻者指南