blob: fc1c58e2a5364e9109337329a44ebb486a94c5e0 [file] [log] [blame]
// Copyright 2020 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 {
fidl_fuchsia_io as io,
futures::{channel::mpsc, sink::SinkExt, StreamExt},
/// Allows logging the requests of one Directory client-server pair.
pub struct DirectoryRequestLogger {
name: String,
tx: mpsc::Sender<String>,
impl DirectoryRequestLogger {
/// Returns a DirectoryRequestLogger that sends messages on the passed-in
/// channel |tx| during log_requests annotated with the |name| of the logger.
pub fn new(name: String, tx: mpsc::Sender<String>) -> Self {
DirectoryRequestLogger { name, tx }
/// Forwards requests to the server end of the connection and also sends
/// a string message about the request to the tx log channel.
/// TODO( Currently we are only supporting forwarding Directory.Open calls.
/// We need a better generic way to forward requests. Also, the logged open request
/// format is a custom string. This could be made into a better format as well.
pub async fn log_requests(
&mut self,
mut from_client: io::DirectoryRequestStream,
to_service: io::DirectoryProxy,
) {
while let Some(Ok(request)) = {
match request {
io::DirectoryRequest::Open { flags, mode, path, object, control_handle: _ } => {
"{} flags:{}, mode:{}, path:{}",, flags, mode, path
.expect(&format!("Directory {} tx/rx/channel was closed",;
.open(flags, mode, &path, object)
.expect("Directory open call failed.");
_ => (),