devtools/actors/watcher/
network_parent.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use malloc_size_of_derive::MallocSizeOf;
6use serde_json::{Map, Value};
7
8use crate::actor::{Actor, ActorEncode, ActorError, ActorRegistry};
9use crate::protocol::ClientRequest;
10use crate::{ActorMsg, EmptyReplyMsg, StreamId};
11
12#[derive(MallocSizeOf)]
13pub(crate) struct NetworkParentActor {
14    name: String,
15}
16
17impl Actor for NetworkParentActor {
18    fn name(&self) -> String {
19        self.name.clone()
20    }
21
22    /// The network parent actor can handle the following messages:
23    ///
24    /// - `setSaveRequestAndResponseBodies`: Doesn't do anything yet
25    fn handle_message(
26        &self,
27        request: ClientRequest,
28        _registry: &ActorRegistry,
29        msg_type: &str,
30        _msg: &Map<String, Value>,
31        _id: StreamId,
32    ) -> Result<(), ActorError> {
33        match msg_type {
34            "setSaveRequestAndResponseBodies" => {
35                let msg = EmptyReplyMsg { from: self.name() };
36                request.reply_final(&msg)?
37            },
38            "setPersist" => {
39                let msg = EmptyReplyMsg { from: self.name() };
40                request.reply_final(&msg)?
41            },
42            _ => return Err(ActorError::UnrecognizedPacketType),
43        };
44        Ok(())
45    }
46}
47
48impl NetworkParentActor {
49    pub fn register(registry: &ActorRegistry) -> String {
50        let name = registry.new_name::<Self>();
51        let actor = Self { name: name.clone() };
52        registry.register::<Self>(actor);
53        name
54    }
55}
56
57impl ActorEncode<ActorMsg> for NetworkParentActor {
58    fn encode(&self, _: &ActorRegistry) -> ActorMsg {
59        ActorMsg { actor: self.name() }
60    }
61}