| // Copyright 2019 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. | 
 |  | 
 | #ifndef LIB_VFS_CPP_NODE_KIND_H_ | 
 | #define LIB_VFS_CPP_NODE_KIND_H_ | 
 |  | 
 | #include <cstdint> | 
 |  | 
 | namespace vfs { | 
 |  | 
 | class NodeKind { | 
 |  public: | 
 |   using Type = uint64_t; | 
 |  | 
 |   NodeKind() = delete; | 
 |  | 
 |   // Node is a Directory | 
 |   static constexpr Type kDirectory = 0x01; | 
 |  | 
 |   // Remote node acts as a proxy between client and a remote directory channel. | 
 |   static constexpr Type kRemote = 0x02; | 
 |  | 
 |   // Node is a File. | 
 |   static constexpr Type kFile = 0x04; | 
 |  | 
 |   // Node is a service. | 
 |   static constexpr Type kService = 0x08; | 
 |  | 
 |   // Node is a VMO. | 
 |   static constexpr Type kVmo = 0x10; | 
 |  | 
 |   // Node is Writable. | 
 |   static constexpr Type kWritable = 0x0100; | 
 |  | 
 |   // Node is Readable. | 
 |   static constexpr Type kReadable = 0x0200; | 
 |  | 
 |   // Node can be mounted, | 
 |   static constexpr Type kMountable = 0x0400; | 
 |  | 
 |   // Node can be truncated on open. | 
 |   static constexpr Type kCanTruncate = 0x0800; | 
 |  | 
 |   // Node can be created on open. | 
 |   static constexpr Type kCreatable = 0x1000; | 
 |   static constexpr Type kAppendable = 0x2000; | 
 |  | 
 |   static bool IsDirectory(Type kind) { return (kind & kDirectory) == kDirectory; } | 
 |  | 
 |   static bool IsFile(Type kind) { return (kind & kFile) == kFile; } | 
 |  | 
 |   static bool IsService(Type kind) { return (kind & kService) == kService; } | 
 |  | 
 |   static bool IsVMO(Type kind) { return (kind & kVmo) == kVmo; } | 
 |  | 
 |   static bool IsRemote(Type kind) { return (kind & kRemote) == kRemote; } | 
 | }; | 
 |  | 
 | }  // namespace vfs | 
 |  | 
 | #endif  // LIB_VFS_CPP_NODE_KIND_H_ |