1/*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16//! Plugin manager related definitions.
17
18use std::any::Any;
19
20use ipc_rust::BorrowedMsgParcel;
21
22use fusion_utils_rust::{ define_enum, FusionResult, FusionErrorCode };
23
24use crate::CallingContext;
25
26define_enum! {
27    Intention {
28        Basic,
29        Drag,
30        Coordination
31    }
32}
33
34/// Interface between service modules and intention framework.
35pub trait IPlugin: Any + Send + Sync + std::panic::RefUnwindSafe {
36    /// Enable this service.
37    fn enable(&self, context: &CallingContext, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
38    /// Disable this service.
39    fn disable(&self, context: &CallingContext, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
40    /// Start work of this service.
41    fn start(&self, context: &CallingContext, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
42    /// Stop work of this service.
43    fn stop(&self, context: &CallingContext, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
44    /// Add a watch to a state of this service.
45    fn add_watch(&self, context: &CallingContext, id: u32, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
46    /// Remove a watch to a state of this service.
47    fn remove_watch(&self, context: &CallingContext, id: u32, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
48    /// Set a paramenter of this service.
49    fn set_param(&self, context: &CallingContext, id: u32, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
50    /// Get a parameter of this service.
51    fn get_param(&self, context: &CallingContext, id: u32, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
52    /// Interact with this service. This interface supplements functions of previous intefaces.
53    /// Functionalities of this interface is service spicific.
54    fn control(&self, context: &CallingContext, id: u32, data: &BorrowedMsgParcel, reply: &mut BorrowedMsgParcel) -> FusionResult<()>;
55}
56