> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinetica.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FnUploadListener

> FnUploadListener — Kinetica Rust API

[gpudb\_api](https://docs.kinetica.com/content/api/rust/index.md)::<wbr />[filesystem](https://docs.kinetica.com/content/api/rust/filesystem/index.md)
[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L163-L172)&#x20;

<pre>`pub struct FnUploadListener<F1, F2, F3>where    F1: Fn(Vec<OperationResult>) + Send + Sync,    F2: Fn(OperationResult) + Send + Sync,    F3: Fn(OperationResult) + Send + Sync,{ /* private fields */ }`</pre>

A simple upload listener that wraps callback functions.This provides a convenient way to create listeners using closures without implementing the full trait.

## Example

```rust theme={null}
use gpudb_api::filesystem::{FnUploadListener, OperationResult};

let listener = FnUploadListener::new(
    |results| println!("Multi-part complete: {} parts", results.len()),
    |result| println!("Part {} uploaded", result.file_name),
    |result| println!("Full files uploaded: {:?}", result.full_file_names),
);
```

## Implementations

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L174-L188)

### impl\<F1, F2, F3>[FnUploadListener](https://docs.kinetica.com/content/api/rust/filesystem/struct.FnUploadListener.md)\<F1, F2, F3>&#xA;where F1: [Fn](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.Fn.html)([Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<[OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)>) + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html) + [Sync](https://doc.rust-lang.org/1.98.1/core/marker/trait.Sync.html), F2: [Fn](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.Fn.html)([OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)) + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html) + [Sync](https://doc.rust-lang.org/1.98.1/core/marker/trait.Sync.html), F3: [Fn](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.Fn.html)([OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)) + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html) + [Sync](https://doc.rust-lang.org/1.98.1/core/marker/trait.Sync.html),

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L181-L187)
pub fn [new](#method.new)(on\_multi\_part\_complete: F1, on\_part: F2, on\_full: F3) -> Self

Creates a new function-based upload listener.

## Trait Implementations

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L190-L207)

### impl\<F1, F2, F3>[FileUploadListener](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md) for [FnUploadListener](https://docs.kinetica.com/content/api/rust/filesystem/struct.FnUploadListener.md)\<F1, F2, F3>&#xA;where F1: [Fn](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.Fn.html)([Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<[OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)>) + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html) + [Sync](https://doc.rust-lang.org/1.98.1/core/marker/trait.Sync.html), F2: [Fn](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.Fn.html)([OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)) + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html) + [Sync](https://doc.rust-lang.org/1.98.1/core/marker/trait.Sync.html), F3: [Fn](https://doc.rust-lang.org/1.98.1/core/ops/function/trait.Fn.html)([OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)) + [Send](https://doc.rust-lang.org/1.98.1/core/marker/trait.Send.html) + [Sync](https://doc.rust-lang.org/1.98.1/core/marker/trait.Sync.html),

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L196-L198)
fn [on\_multi\_part\_upload\_complete](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#tymethod.on_multi_part_upload_complete)(\&self, results: [Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<[OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)>)

Called when all parts of a multi-part upload have been completed. [Read more](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#tymethod.on_multi_part_upload_complete)

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L200-L202)
fn [on\_part\_upload](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#tymethod.on_part_upload)(\&self, result: [OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md))

Called whenever a single part of a multi-part upload has been completed. [Read more](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#tymethod.on_part_upload)

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L204-L206)
fn [on\_full\_file\_upload](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#tymethod.on_full_file_upload)(\&self, result: [OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md))

Called for each batch of whole files sent in one request, as it finishes, and for each file that could not be read to be sent. [Read more](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#tymethod.on_full_file_upload)

[Source](https://github.com/kineticadb/kinetica-api-rust/blob/master/crates/gpudb-api/src/filesystem/listeners.rs#L61-L63)
fn [on\_multi\_part\_upload\_cancel](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#method.on_multi_part_upload_cancel)(\&self, results: [Vec](https://doc.rust-lang.org/1.98.1/alloc/vec/struct.Vec.html)\<[OperationResult](https://docs.kinetica.com/content/api/rust/filesystem/struct.OperationResult.md)>)

Called when a multi-part upload was aborted because one of its stages failed after it had been initiated. [Read more](https://docs.kinetica.com/content/api/rust/filesystem/trait.FileUploadListener.md#method.on_multi_part_upload_cancel)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.