mirror of
https://github.com/tauri-apps/tauri.git
synced 2024-12-19 00:21:32 +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 tauri_macros::{command_enum, module_command_handler, CommandModule};
|
||||||
|
|
||||||
use std::fmt::{Debug, Formatter};
|
use std::{
|
||||||
|
fmt::{Debug, Formatter},
|
||||||
|
fs::OpenOptions,
|
||||||
|
};
|
||||||
use std::{
|
use std::{
|
||||||
fs,
|
fs,
|
||||||
fs::File,
|
fs::File,
|
||||||
@ -49,6 +52,8 @@ pub struct FileOperationOptions {
|
|||||||
/// The base directory of the operation.
|
/// The base directory of the operation.
|
||||||
/// The directory path of the BaseDirectory will be the prefix of the defined file path.
|
/// The directory path of the BaseDirectory will be the prefix of the defined file path.
|
||||||
pub dir: Option<BaseDirectory>,
|
pub dir: Option<BaseDirectory>,
|
||||||
|
/// Whether writeFile should append to a file or truncate it.
|
||||||
|
pub append: Option<bool>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The API descriptor.
|
/// The API descriptor.
|
||||||
@ -166,6 +171,11 @@ impl Cmd {
|
|||||||
contents: Vec<u8>,
|
contents: Vec<u8>,
|
||||||
options: Option<FileOperationOptions>,
|
options: Option<FileOperationOptions>,
|
||||||
) -> super::Result<()> {
|
) -> super::Result<()> {
|
||||||
|
let append = options
|
||||||
|
.as_ref()
|
||||||
|
.and_then(|opt| opt.append)
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
let resolved_path = resolve_path(
|
let resolved_path = resolve_path(
|
||||||
&context.config,
|
&context.config,
|
||||||
&context.package_info,
|
&context.package_info,
|
||||||
@ -173,7 +183,12 @@ impl Cmd {
|
|||||||
path,
|
path,
|
||||||
options.and_then(|o| o.dir),
|
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()))
|
.with_context(|| format!("path: {}", resolved_path.display()))
|
||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
.and_then(|mut f| f.write_all(&contents).map_err(|err| err.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 {
|
fn arbitrary(g: &mut Gen) -> Self {
|
||||||
Self {
|
Self {
|
||||||
dir: Option::arbitrary(g),
|
dir: Option::arbitrary(g),
|
||||||
|
append: Option::arbitrary(g),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,12 @@ export enum BaseDirectory {
|
|||||||
*/
|
*/
|
||||||
interface FsOptions {
|
interface FsOptions {
|
||||||
dir?: BaseDirectory
|
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
|
// note that adding fields here needs a change in the writeBinaryFile check
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user