pub struct DirectorySynchronousProxy { /* private fields */ }Implementations§
Source§impl DirectorySynchronousProxy
impl DirectorySynchronousProxy
pub fn new(channel: Channel) -> Self
pub fn into_channel(self) -> Channel
Sourcepub fn wait_for_event(
&self,
deadline: MonotonicInstant,
) -> Result<DirectoryEvent, Error>
pub fn wait_for_event( &self, deadline: MonotonicInstant, ) -> Result<DirectoryEvent, Error>
Waits until an event arrives and returns it. It is safe for other threads to make concurrent requests while waiting for an event.
Sourcepub fn advisory_lock(
&self,
request: &AdvisoryLockRequest,
___deadline: MonotonicInstant,
) -> Result<AdvisoryLockingAdvisoryLockResult, Error>
pub fn advisory_lock( &self, request: &AdvisoryLockRequest, ___deadline: MonotonicInstant, ) -> Result<AdvisoryLockingAdvisoryLockResult, Error>
Acquires an advisory lock on the underlying file.
The lock lasts until either this connection is closed or this method is called with |AdvisoryLockType.UNLOCK| to release the lock explicitly.
Advisory locks are purely advisory. They do not prevent actual read or write operations from occurring on the file, either through this connection or through other connections.
This method requires the following rights:
- [
Rights.READ_BYTES] ifrequest.typeis [AdvisoryLockType.READ]. - [
Rights.WRITE_BYTES] ifrequest.typeis [AdvisoryLockType.WRITE].
§Errors
ZX_ERR_BAD_STATEThe specified type of lock cannot be acquired. For example, another connection might hold a conflicting lock type.ZX_ERR_NOT_SUPPORTEDThis file does not support advisory locking.ZX_ERR_ACCESS_DENIEDThis connection does not have sufficient rights to acquire the given type of lock.
pub fn clone(&self, request: ServerEnd<CloneableMarker>) -> Result<(), Error>
Sourcepub fn close(
&self,
___deadline: MonotonicInstant,
) -> Result<CloseableCloseResult, Error>
pub fn close( &self, ___deadline: MonotonicInstant, ) -> Result<CloseableCloseResult, Error>
Terminates the connection.
After calling Close, the client must not send any other requests.
Servers, after sending the status response, should close the connection regardless of status and without sending an epitaph.
Closing the client end of the channel should be semantically equivalent
to calling Close without knowing when the close has completed or its
status.
pub fn query(&self, ___deadline: MonotonicInstant) -> Result<Vec<u8>, Error>
Sourcepub fn deprecated_clone(
&self,
flags: OpenFlags,
object: ServerEnd<NodeMarker>,
) -> Result<(), Error>
pub fn deprecated_clone( &self, flags: OpenFlags, object: ServerEnd<NodeMarker>, ) -> Result<(), Error>
DEPRECATED - Use fuchsia.unknown/Cloneable.Clone instead.
Sourcepub fn deprecated_get_attr(
&self,
___deadline: MonotonicInstant,
) -> Result<(i32, NodeAttributes), Error>
pub fn deprecated_get_attr( &self, ___deadline: MonotonicInstant, ) -> Result<(i32, NodeAttributes), Error>
DEPRECATED - Use Node.GetAttributes instead.
Sourcepub fn deprecated_set_attr(
&self,
flags: NodeAttributeFlags,
attributes: &NodeAttributes,
___deadline: MonotonicInstant,
) -> Result<i32, Error>
pub fn deprecated_set_attr( &self, flags: NodeAttributeFlags, attributes: &NodeAttributes, ___deadline: MonotonicInstant, ) -> Result<i32, Error>
DEPRECATED - Use Node.UpdateAttributes instead.
Sourcepub fn deprecated_get_flags(
&self,
___deadline: MonotonicInstant,
) -> Result<(i32, OpenFlags), Error>
pub fn deprecated_get_flags( &self, ___deadline: MonotonicInstant, ) -> Result<(i32, OpenFlags), Error>
[DEPRECATED - Use new GetFlags method instead.]
Sourcepub fn deprecated_set_flags(
&self,
flags: OpenFlags,
___deadline: MonotonicInstant,
) -> Result<i32, Error>
pub fn deprecated_set_flags( &self, flags: OpenFlags, ___deadline: MonotonicInstant, ) -> Result<i32, Error>
[DEPRECATED - Use new SetFlags method instead.]
Sourcepub fn get_flags(
&self,
___deadline: MonotonicInstant,
) -> Result<NodeGetFlagsResult, Error>
pub fn get_flags( &self, ___deadline: MonotonicInstant, ) -> Result<NodeGetFlagsResult, Error>
Queries the flags that apply to this node after it has been opened/created. This method does not require any rights.
Note that the final set of flags that apply to the connection may differ from those
specified with the fuchsia.io/Directory.Open request used to create it:
Flags.PERM_INHERIT_*: Only applies when determining connection rights.Flags.PROTOCOL_*: Only the protocol of the connection will be present.Flags.FLAG_*: Only applies when opening the resource, not part of the connection.
Sourcepub fn set_flags(
&self,
flags: Flags,
___deadline: MonotonicInstant,
) -> Result<NodeSetFlagsResult, Error>
pub fn set_flags( &self, flags: Flags, ___deadline: MonotonicInstant, ) -> Result<NodeSetFlagsResult, Error>
Sets the flags that apply to this node after it has been opened. This method does not require any rights.
Only Flags.FILE_APPEND is currently supported. Calling this method without any flags will
clear append mode.
Errors:
ZX_ERR_NOT_SUPPORTED: The object does not support this feature or the specified flags.ZX_ERR_INVALID_ARGS:flagsother thanFlags.FILE_APPENDwere specified.
Sourcepub fn query_filesystem(
&self,
___deadline: MonotonicInstant,
) -> Result<(i32, Option<Box<FilesystemInfo>>), Error>
pub fn query_filesystem( &self, ___deadline: MonotonicInstant, ) -> Result<(i32, Option<Box<FilesystemInfo>>), Error>
Query the filesystem for filesystem-specific information.
Sourcepub fn get_attributes(
&self,
query: NodeAttributesQuery,
___deadline: MonotonicInstant,
) -> Result<NodeGetAttributesResult, Error>
pub fn get_attributes( &self, query: NodeAttributesQuery, ___deadline: MonotonicInstant, ) -> Result<NodeGetAttributesResult, Error>
Acquires information about the node.
The attributes of a node should be stable, independent of the specific protocol used to access it.
If a particular attribute is not applicable or not supported, filesystems should leave the corresponding field absent.
querya bit-mask specifying which attributes to fetch. The server should not return more than necessary.
attributesthe returned attributes.
This method requires the [Rights.GET_ATTRIBUTES] right.
Sourcepub fn update_attributes(
&self,
payload: &MutableNodeAttributes,
___deadline: MonotonicInstant,
) -> Result<NodeUpdateAttributesResult, Error>
pub fn update_attributes( &self, payload: &MutableNodeAttributes, ___deadline: MonotonicInstant, ) -> Result<NodeUpdateAttributesResult, Error>
Updates information about the node.
attributesthe presence of a table field inattributesindicates the intent to update the corresponding attribute.
Returns ZX_ERR_NOT_SUPPORTED if the node does not support any of the specified attributes.
This method requires the [Rights.UPDATE_ATTRIBUTES] right.
Sourcepub fn sync(
&self,
___deadline: MonotonicInstant,
) -> Result<NodeSyncResult, Error>
pub fn sync( &self, ___deadline: MonotonicInstant, ) -> Result<NodeSyncResult, Error>
Synchronizes updates to the node to the underlying media, if it exists.
This method will return when the filesystem server has flushed the
relevant updates to the underlying media, but does not guarantee the
underlying media has persisted the information, nor that any information
is committed to hardware. Clients may use Sync to ensure ordering
between operations.
This method does not require any rights.
Sourcepub fn list_extended_attributes(
&self,
iterator: ServerEnd<ExtendedAttributeIteratorMarker>,
) -> Result<(), Error>
pub fn list_extended_attributes( &self, iterator: ServerEnd<ExtendedAttributeIteratorMarker>, ) -> Result<(), Error>
Creates an iterator over all the extended attribute names associated with this node. If an error occurs it is returned as an epitaph on the iterator request channel, and then the channel is closed.
GetExtendedAttributes can be used with any of these names to retrieve the associated value.
This method requires the [Rights.GET_ATTRIBUTES] right.
Sourcepub fn get_extended_attribute(
&self,
name: &[u8],
___deadline: MonotonicInstant,
) -> Result<NodeGetExtendedAttributeResult, Error>
pub fn get_extended_attribute( &self, name: &[u8], ___deadline: MonotonicInstant, ) -> Result<NodeGetExtendedAttributeResult, Error>
Get the value associated with the given attribute name for this node.
Attribute names have a maximum length of MAX_ATTRIBUTE_NAME. No particular structure is imposed on them.
This method requires the [Rights.GET_ATTRIBUTES] right.
Sourcepub fn set_extended_attribute(
&self,
name: &[u8],
value: ExtendedAttributeValue,
mode: SetExtendedAttributeMode,
___deadline: MonotonicInstant,
) -> Result<NodeSetExtendedAttributeResult, Error>
pub fn set_extended_attribute( &self, name: &[u8], value: ExtendedAttributeValue, mode: SetExtendedAttributeMode, ___deadline: MonotonicInstant, ) -> Result<NodeSetExtendedAttributeResult, Error>
Set the value for the given attribute name to value for this node.
The attribute name may exist, in which case the attribute is updated. If the attribute doesn’t exist, it is created. The name should have no null bytes in it. If it does, ZX_ERR_INVALID_ARGS is returned.
This method requires the [Rights.UPDATE_ATTRIBUTES] right.
Sourcepub fn remove_extended_attribute(
&self,
name: &[u8],
___deadline: MonotonicInstant,
) -> Result<NodeRemoveExtendedAttributeResult, Error>
pub fn remove_extended_attribute( &self, name: &[u8], ___deadline: MonotonicInstant, ) -> Result<NodeRemoveExtendedAttributeResult, Error>
Remove the specified extended attribute.
If the attribute doesn’t exist, ZX_ERR_NOT_FOUND is returned.
This method requires the [Rights.UPDATE_ATTRIBUTES] right.
Sourcepub fn deprecated_open(
&self,
flags: OpenFlags,
mode: ModeType,
path: &str,
object: ServerEnd<NodeMarker>,
) -> Result<(), Error>
pub fn deprecated_open( &self, flags: OpenFlags, mode: ModeType, path: &str, object: ServerEnd<NodeMarker>, ) -> Result<(), Error>
DEPRECATED - Use fuchsia.io/Directory.Open instead.
Sourcepub fn open(
&self,
path: &str,
flags: Flags,
options: &Options,
object: Channel,
) -> Result<(), Error>
pub fn open( &self, path: &str, flags: Flags, options: &Options, object: Channel, ) -> Result<(), Error>
Open (or create) a node relative to this directory. Any errors are communicated via an
epitaph sent on the object channel.
Errors:
ZX_ERR_BAD_PATHifpathis invalid- See
Flagsfor other errors which may be communicated based onflags
Sourcepub fn read_dirents(
&self,
max_bytes: u64,
___deadline: MonotonicInstant,
) -> Result<(i32, Vec<u8>), Error>
pub fn read_dirents( &self, max_bytes: u64, ___deadline: MonotonicInstant, ) -> Result<(i32, Vec<u8>), Error>
Reads a collection of variably sized dirents into a buffer.
The number of dirents in a directory may be very large: akin to
calling read multiple times on a file, directories have a seek
offset which is updated on subsequent calls to ReadDirents.
Each call to ReadDirents will only return whole dirent structures,
they will not get split across ReadDirent calls. When the seek
offset reaches the end, dirents will be empty.
These dirents are of the form:
struct dirent {
// Describes the inode of the entry.
uint64 ino;
// Describes the length of the dirent name in bytes.
uint8 size;
// Describes the type of the entry. Aligned with the
// POSIX d_type values. Use `DirentType` constants.
uint8 type;
// Unterminated name of entry.
char name[0];
}This method does not require any rights, since one could always probe for directory contents by triggering name conflicts during file creation.
Sourcepub fn rewind(&self, ___deadline: MonotonicInstant) -> Result<i32, Error>
pub fn rewind(&self, ___deadline: MonotonicInstant) -> Result<i32, Error>
Resets the directory seek offset.
This method does not require any rights, similar to ReadDirents.
Sourcepub fn get_token(
&self,
___deadline: MonotonicInstant,
) -> Result<(i32, Option<Handle>), Error>
pub fn get_token( &self, ___deadline: MonotonicInstant, ) -> Result<(i32, Option<Handle>), Error>
Acquires a token to a Directory which can be used to identify access to it at a later point in time. The token will remain valid for as long as the connection requesting the token remains open.
This method requires following rights: OpenFlags.RIGHT_WRITABLE, otherwise returns
ZX_ERR_BAD_HANDLE.
Sourcepub fn link(
&self,
src: &str,
dst_parent_token: Handle,
dst: &str,
___deadline: MonotonicInstant,
) -> Result<i32, Error>
pub fn link( &self, src: &str, dst_parent_token: Handle, dst: &str, ___deadline: MonotonicInstant, ) -> Result<i32, Error>
Creates a link to an object named src by the name dst, within a directory represented by token.
src must be a resolved object name. Including “/” in the string will
return ZX_ERR_INVALID_ARGS.
dst must be a resolved object name. Including “/” in the string will
return ZX_ERR_INVALID_ARGS.
This method requires following rights: OpenFlags.RIGHT_WRITABLE and
OpenFlags.RIGHT_READABLE, otherwise returns ZX_ERR_BAD_HANDLE.
This will be atomic with respect to renaming or unlinking the source concurrently e.g. if there are two actors operating concurrently, and one actor performs a rename that affects the source within this directory, and the other does a link, each will appear to occur atomically in an unspecified order.
Sourcepub fn unlink(
&self,
name: &str,
options: &UnlinkOptions,
___deadline: MonotonicInstant,
) -> Result<DirectoryUnlinkResult, Error>
pub fn unlink( &self, name: &str, options: &UnlinkOptions, ___deadline: MonotonicInstant, ) -> Result<DirectoryUnlinkResult, Error>
Removes a child node from the this directory’s list of entries.
Note: this does not guarantee that the underlying object is destroyed. Although the link will be removed from the containing directory, objects with multiple references (such as files which are still open) will not actually be destroyed until all references are closed.
- error
ZX_ERR_ACCESS_DENIEDif the connection does not have [Rights.WRITE_BYTES]. - error
ZX_ERR_NOT_SUPPORTEDif the underlying filesystem does not support writing. - error
ZX_ERR_BAD_PATHifnameis invalid. - error
ZX_ERR_NOT_EMPTYifnamerefers to a non-empty directory. - error
ZX_ERR_UNAVAILABLEifnamerefers to a mount point, containing a remote channel. - error
ZX_ERR_NOT_DIRif the options requested a directory but something other than a directory was found.
Other errors may be returned for filesystem-specific reasons.
This method requires the following rights:
- [
Rights.ENUMERATE] - [
Rights.MODIFY_DIRECTORY]
Sourcepub fn rename(
&self,
src: &str,
dst_parent_token: Event,
dst: &str,
___deadline: MonotonicInstant,
) -> Result<DirectoryRenameResult, Error>
pub fn rename( &self, src: &str, dst_parent_token: Event, dst: &str, ___deadline: MonotonicInstant, ) -> Result<DirectoryRenameResult, Error>
Renames a node named src to the name dst, in a directory represented
by dst_parent_token.
src and dst must be valid node names.
See Name for what constitutes a valid name.
This method requires the following rights on both the current connection, and the connection
identified by dst_parent_token:
- [
Rights.ENUMERATE] - [
Rights.MODIFY_DIRECTORY]
The following requirements are necessary to avoid rights escalations.
If the source and destination directory differ, the source directory must also have the
maximal set of abilities supported for files, which would typically be
[Rights.READ_BYTES], [Rights.WRITE_BYTES], [Rights.GET_ATTRIBUTES] and
[Rights.UPDATE_ATTRIBUTES]. Some filesystems might also support the [Rights.EXECUTE]
right.
If src refers to a directory, and differs from the destination directory, then the source
directory must have also have the [Rights.CONNECT] and [Rights.TRAVERSE] rights.
- error
ZX_ERR_INVALID_ARGSifsrcordstis invalid. - error
ZX_ERR_ACCESS_DENIEDfor insufficient rights.
Sourcepub fn create_symlink(
&self,
name: &str,
target: &[u8],
connection: Option<ServerEnd<SymlinkMarker>>,
___deadline: MonotonicInstant,
) -> Result<DirectoryCreateSymlinkResult, Error>
pub fn create_symlink( &self, name: &str, target: &[u8], connection: Option<ServerEnd<SymlinkMarker>>, ___deadline: MonotonicInstant, ) -> Result<DirectoryCreateSymlinkResult, Error>
Creates a symbolic link.
name is the name to be given to the created symbolic link.
target is the target of the symbolic link, which has no meaning on the server. The server
will perform no validation of target except for a server chosen maximum length.
connection is an optional server end of a channel that will speak the Symlink protocol
on the successfully created node.
-
[
Rights.MODIFY_DIRECTORY] -
error
ZX_ERR_ALREADY_EXISTSifnamealready exists. -
error
ZX_ERR_BAD_PATHiftargetexceeds the server length limit for symbolic links. -
error
ZX_ERR_INVALID_ARGSifnameis not a validName. -
error
ZX_ERR_NOT_SUPPORTEDif creating symbolic links is not supported by the server.
Sourcepub fn watch(
&self,
mask: WatchMask,
options: u32,
watcher: ServerEnd<DirectoryWatcherMarker>,
___deadline: MonotonicInstant,
) -> Result<i32, Error>
pub fn watch( &self, mask: WatchMask, options: u32, watcher: ServerEnd<DirectoryWatcherMarker>, ___deadline: MonotonicInstant, ) -> Result<i32, Error>
Watches a directory, receiving events of added messages on the watcher request channel.
Options must be zero; it is reserved.
This method does not require any rights, similar to ReadDirents.
Trait Implementations§
Source§impl Debug for DirectorySynchronousProxy
impl Debug for DirectorySynchronousProxy
Source§impl From<Channel> for DirectorySynchronousProxy
Available on Fuchsia only.
impl From<Channel> for DirectorySynchronousProxy
Source§impl From<DirectorySynchronousProxy> for Handle
Available on Fuchsia only.
impl From<DirectorySynchronousProxy> for Handle
Source§fn from(value: DirectorySynchronousProxy) -> Self
fn from(value: DirectorySynchronousProxy) -> Self
Source§impl FromClient for DirectorySynchronousProxy
Available on Fuchsia only.
impl FromClient for DirectorySynchronousProxy
Source§type Protocol = DirectoryMarker
type Protocol = DirectoryMarker
Source§fn from_client(value: ClientEnd<DirectoryMarker>) -> Self
fn from_client(value: ClientEnd<DirectoryMarker>) -> Self
Source§impl SynchronousProxy for DirectorySynchronousProxy
Available on Fuchsia only.
impl SynchronousProxy for DirectorySynchronousProxy
Source§type Proxy = DirectoryProxy
type Proxy = DirectoryProxy
Source§type Protocol = DirectoryMarker
type Protocol = DirectoryMarker
Proxy controls.