// Copyright 2022 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.

use serde::Serialize;
use serde_json::json;

#[derive(Serialize, Debug, Default)]
pub struct DisplayInfo {
    pub id: String,
    pub width: u32,
    pub height: u32,
}

#[derive(Serialize, Debug, Default)]
pub struct DetectResult {
    /// A list of detected displays.
    pub displays: Vec<DisplayInfo>,
    /// If any errors were encountered, they're returned here.
    pub error: serde_json::Value,
    /// Platform-specific details about the detected display. This is for informational and
    /// debugging purposes only.
    pub details: serde_json::Value,
}

impl DetectResult {
    pub fn from_error(e: anyhow::Error) -> Self {
        DetectResult { error: json!(format!("{}", e)), ..Default::default() }
    }
}
