use alloc::format;
use uefi::runtime::{set_variable, VariableAttributes, VariableVendor};
use uefi::{CString16, Guid};
use vck_common::handover::payload::{encode_payload, HandoverPayload};
use vck_common::{VckError, VckResult};
pub fn install_handover<P: HandoverPayload>(payload: &P) -> VckResult<()> {
let data = encode_payload(payload)?;
let name = CString16::try_from(P::VAR_NAME)
.map_err(|_| VckError::InvalidData("handover variable name not valid UCS-2"))?;
let vendor = VariableVendor(Guid::from_bytes(P::VAR_GUID));
let attrs = VariableAttributes::BOOTSERVICE_ACCESS | VariableAttributes::RUNTIME_ACCESS;
set_variable(&name, &vendor, attrs, &data)
.map_err(|e| VckError::Io(format!("SetVariable(handover) failed: {e:?}")))
}