// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@available(added=7)
library fuchsia.buildinfo;

const MAX_STRING_LENGTH uint64 = 100;

type BuildInfo = table {
    /// A description of the product configuration used at build time, determined
    /// by the value passed as PRODUCT in 'fx set'. See 'fx list-products' for a
    /// list of possible values.
    1: product_config string:MAX_STRING_LENGTH;

    /// A description of the board configuration used at build time, determined by
    /// the value passed as BOARD in 'fx set'. See `fx list-boards` for a list of
    /// possible values.
    2: board_config string:MAX_STRING_LENGTH;

    /// A description of the version of the build. Defaults to the same string as
    /// latest_commit_date.
    3: version string:MAX_STRING_LENGTH;

    /// The timestamp of the most recent commit to the integration repository
    /// (specifically, the "CommitDate" field) formatted in strict ISO 8601 format in
    /// the UTC timezone. Example: "2019-03-28T15:42:20+00:00"
    4: latest_commit_date string:MAX_STRING_LENGTH;
};

/// Returns build information about a Fuchsia system.
@discoverable
closed protocol Provider {
    /// Returns a table of build information.
    strict GetBuildInfo() -> (struct {
        build_info BuildInfo;
    });
};
