mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-18 16:11:38 +03:00
feat(api): Add append
option to writeFile apis (#7636)
* feat(api): Add `append` option to writeFile apis. * wording * fmt * Update .changes/fs-append-file.md * clippeeeyyyy
This commit is contained in:
parent
964d81ff01
commit
58d6b899e2
6
.changes/fs-append-file.md
Normal file
6
.changes/fs-append-file.md
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
'@tauri-apps/api': 'patch:enhance'
|
||||
'tauri': 'patch:enhance'
|
||||
---
|
||||
|
||||
Add `append` option to `FsOptions` in the `fs` JS module, used in `writeTextFile` and `writeBinaryFile`, to be able to append to existing files instead of overwriting it.
|
@ -23,7 +23,10 @@ use serde::{
|
||||
};
|
||||
use tauri_macros::{command_enum, module_command_handler, CommandModule};
|
||||
|
||||
use std::fmt::{Debug, Formatter};
|
||||
use std::{
|
||||
fmt::{Debug, Formatter},
|
||||
fs::OpenOptions,
|
||||
};
|
||||
use std::{
|
||||
fs,
|
||||
fs::File,
|
||||
@ -49,6 +52,8 @@ pub struct FileOperationOptions {
|
||||
/// The base directory of the operation.
|
||||
/// The directory path of the BaseDirectory will be the prefix of the defined file path.
|
||||
pub dir: Option<BaseDirectory>,
|
||||
/// Whether writeFile should append to a file or truncate it.
|
||||
pub append: Option<bool>,
|
||||
}
|
||||
|
||||
/// The API descriptor.
|
||||
@ -166,6 +171,11 @@ impl Cmd {
|
||||
contents: Vec<u8>,
|
||||
options: Option<FileOperationOptions>,
|
||||
) -> super::Result<()> {
|
||||
let append = options
|
||||
.as_ref()
|
||||
.and_then(|opt| opt.append)
|
||||
.unwrap_or_default();
|
||||
|
||||
let resolved_path = resolve_path(
|
||||
&context.config,
|
||||
&context.package_info,
|
||||
@ -173,7 +183,12 @@ impl Cmd {
|
||||
path,
|
||||
options.and_then(|o| o.dir),
|
||||
)?;
|
||||
File::create(&resolved_path)
|
||||
|
||||
OpenOptions::new()
|
||||
.append(append)
|
||||
.write(true)
|
||||
.create(true)
|
||||
.open(&resolved_path)
|
||||
.with_context(|| format!("path: {}", resolved_path.display()))
|
||||
.map_err(Into::into)
|
||||
.and_then(|mut f| f.write_all(&contents).map_err(|err| err.into()))
|
||||
@ -409,6 +424,7 @@ mod tests {
|
||||
fn arbitrary(g: &mut Gen) -> Self {
|
||||
Self {
|
||||
dir: Option::arbitrary(g),
|
||||
append: Option::arbitrary(g),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -110,6 +110,12 @@ export enum BaseDirectory {
|
||||
*/
|
||||
interface FsOptions {
|
||||
dir?: BaseDirectory
|
||||
/**
|
||||
* Whether the content should overwrite the content of the file or append to it.
|
||||
*
|
||||
* @since 1.5.0
|
||||
*/
|
||||
append?: boolean
|
||||
// note that adding fields here needs a change in the writeBinaryFile check
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user