blob: df0cca8be5a14c793e3f5a7828e5d87f86ed20eb [file] [log] [blame]
// Copyright (C) 2024 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//! Errors accessing system properties.
use std::str::Utf8Error;
use thiserror::Error;
/// Errors this crate can generate
#[derive(Debug, Error)]
pub enum PropertyWatcherError {
/// We can't watch for a property whose name contains a NUL character.
#[error("Cannot convert name to C string")]
BadNameError(#[from] std::ffi::NulError),
/// We can only watch for properties that exist when the watcher is created.
#[error("System property is absent")]
SystemPropertyAbsent,
/// System properties are not initialized
#[error("System properties are not initialized.")]
Uninitialized,
/// __system_property_wait timed out.
#[error("Wait failed")]
WaitFailed,
/// read callback was not called
#[error("__system_property_read_callback did not call callback")]
ReadCallbackNotCalled,
/// read callback gave us a NULL pointer
#[error("__system_property_read_callback gave us a NULL pointer instead of a string")]
MissingCString,
/// read callback gave us a bad C string
#[error("__system_property_read_callback gave us a non-UTF8 C string")]
BadCString(#[from] Utf8Error),
/// read callback returned an error
#[error("Callback failed")]
CallbackError(#[from] anyhow::Error),
/// Failure in setting the system property
#[error("__system_property_set failed.")]
SetPropertyFailed,
}
/// Result type specific for this crate.
pub type Result<T> = std::result::Result<T, PropertyWatcherError>;
/// Errors returned by generated system property accessors.
#[derive(Debug, Error)]
pub enum SysPropError {
/// Failed to fetch the system property.
#[error("Failed to fetch system property: {0}")]
FetchError(PropertyWatcherError),
/// Failed to set the system property.
#[error("Failed to set system property: {0}")]
SetError(PropertyWatcherError),
/// Failed to parse the system property value.
#[error("Failed to parse the system property value: {0}")]
ParseError(String),
}