// Copyright 2021 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.
library fuchsia.lightsensor;

/// The color intensities that can be returned from a light sensor.
type Rgbc = struct {
    /// Intensity of red light measured by the light sensor.
    red_intensity float32;

    /// Intensity of green light measured by the light sensor.
    green_intensity float32;

    /// Intensity of blue light measured by the light sensor.
    blue_intensity float32;

    /// Intensity of clear light measured by the light sensor.
    clear_intensity float32;
};

/// Possible error results from API calls.
type Error = strict enum {
    /// The input provided to the API was outside of the valid range of input, or required
    /// parameters were missing from a table.
    INVALID_INPUT = 1;
};
