+
+ for xattr in &metadata.xattrs {
+ self.write_xattr(xattr).await?;
+ }
+
+ self.write_acls(&metadata.acl).await?;
+
+ if let Some(fcaps) = &metadata.fcaps {
+ self.write_file_capabilities(fcaps).await?;
+ }
+
+ if let Some(qpid) = &metadata.quota_project_id {
+ self.write_quota_project_id(qpid).await?;
+ }
+
+ Ok(())
+ }
+
+ async fn write_xattr(&mut self, xattr: &format::XAttr) -> io::Result<()> {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_entry(format::PXAR_XATTR, &xattr.data)
+ .await
+ }
+
+ async fn write_acls(&mut self, acl: &crate::Acl) -> io::Result<()> {
+ for acl in &acl.users {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_struct_entry(format::PXAR_ACL_USER, acl.clone())
+ .await?;
+ }
+
+ for acl in &acl.groups {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_struct_entry(format::PXAR_ACL_GROUP, acl.clone())
+ .await?;
+ }
+
+ if let Some(acl) = &acl.group_obj {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_struct_entry(format::PXAR_ACL_GROUP_OBJ, acl.clone())
+ .await?;
+ }
+
+ if let Some(acl) = &acl.default {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_struct_entry(format::PXAR_ACL_DEFAULT, acl.clone())
+ .await?;
+ }
+
+ for acl in &acl.default_users {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_struct_entry(format::PXAR_ACL_DEFAULT_USER, acl.clone())
+ .await?;
+ }
+
+ for acl in &acl.default_groups {
+ (&mut self.output as &mut dyn SeqWrite)
+ .seq_write_pxar_struct_entry(format::PXAR_ACL_DEFAULT_GROUP, acl.clone())
+ .await?;
+ }
+