# Copyright 2024 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.

header = """
// Copyright 2024 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.
"""

sys_includes = ["zircon/types.h"]

include_guard = "SRC_STORAGE_LIB_BLOCK_SERVER_BLOCK_SERVER_C_H_"

autogen_warning = """
// NOTE: This file is autogenerated by cbindgen.  Don't modify this manually.  To regenerate
// this file:
//
// Add `--cargo-toml-gen` to your `fx set`. Then:
//
// fx build //build/rust:cargo_toml_gen //src/storage/lib/block_server
// fx gen-cargo //src/storage/lib/block_server
// cargo install cbindgen
// rustup default nightly
// cbindgen --output block_server_c.h
// fx format-code
"""

after_includes = """

namespace block_server::internal {

struct BlockServer;

class WriteFlags {
 public:
  bool is_force_access() const { return (options_ & 1) != 0; }
  bool is_pre_barrier() const { return (options_ & 2) != 0; }

 private:
  uint32_t options_;
};

}  // block_server::internal"""

namespaces = ["block_server", "internal"]

includes = ["lib/zx/vmo.h"]

[parse]
parse_deps = true
include = ["block_protocol"]

[export.rename]
"UnownedVmo" = "zx::unowned<zx::vmo>"
