pub struct Client { /* private fields */ }
Expand description
An instance of a Client
is a connection to a single
perspective_server::Server
, whether locally in-memory or remote over some
transport like a WebSocket.
The browser and node.js libraries both support the websocket(url)
constructor, which connects to a remote perspective_server::Server
instance over a WebSocket transport.
In the browser, the worker()
constructor creates a new Web Worker
perspective_server::Server
and returns a Client
connected to it.
In node.js, a pre-instantied Client
connected synhronously to a global
singleton perspective_server::Server
is the default module export.
§JavaScript Examples
Create a Web Worker perspective_server::Server
in the browser and return a
Client
instance connected for it:
import perspective from "@finos/perspective";
const client = await perspective.worker();
Create a WebSocket connection to a remote perspective_server::Server
:
import perspective from "@finos/perspective";
const client = await perspective.websocket("ws://locahost:8080/ws");
Access the synchronous client in node.js:
import { default as client } from "@finos/perspective";
Implementations§
Source§impl Client
impl Client
pub fn new(send_request: Function, close: Option<Function>) -> ApiResult<Self>
pub fn new_proxy_session(&self, on_response: &Function) -> ProxySession
pub async fn handle_response(&self, value: &JsValue) -> ApiResult<()>
pub async fn handle_error( &self, error: String, reconnect: Option<Function>, ) -> ApiResult<()>
pub async fn on_error(&self, callback: Function) -> ApiResult<u32>
Sourcepub async fn table(
&self,
value: &JsTableInitData,
options: Option<JsTableInitOptions>,
) -> ApiResult<Table>
pub async fn table( &self, value: &JsTableInitData, options: Option<JsTableInitOptions>, ) -> ApiResult<Table>
Creates a new Table
from either a schema or data.
The Client::table
factory function can be initialized with either a
schema (see Table::schema
), or data in one of these formats:
- Apache Arrow
- CSV
- JSON row-oriented
- JSON column-oriented
- NDJSON
When instantiated with data, the schema is inferred from this data.
While this is convenient, inferrence is sometimes imperfect e.g.
when the input is empty, null or ambiguous. For these cases,
Client::table
can first be instantiated with a explicit schema.
When instantiated with a schema, the resulting Table
is empty but
with known column names and column types. When subsqeuently
populated with Table::update
, these columns will be coerced to
the schema’s type. This behavior can be useful when
Client::table
’s column type inferences doesn’t work.
The resulting Table
is virtual, and invoking its methods
dispatches events to the perspective_server::Server
this
Client
connects to, where the data is stored and all calculation
occurs.
§Arguments
arg
- Either schema or initialization data.options
- Optional configuration which provides one of:limit
- The max number of rows the resultingTable
can store.index
- The column name to use as an index column. If thisTable
is being instantiated by data, this column name must be present in the data.name
- The name of the table. This will be generated if it is not provided.format
- The explicit format of the input data, can be one of"json"
,"columns"
,"csv"
or"arrow"
. This overrides language-specific type dispatch behavior, which allows stringified and byte array alternative inputs.
§JavaScript Examples
Load a CSV from a string
:
const table = await client.table("x,y\n1,2\n3,4");
Load an Arrow from an ArrayBuffer
:
import * as fs from "node:fs/promises";
const table2 = await client.table(await fs.readFile("superstore.arrow"));
Load a CSV from a UInt8Array
(the default for this type is Arrow)
using a format override:
const enc = new TextEncoder();
const table = await client.table(enc.encode("x,y\n1,2\n3,4"), {
format: "csv",
});
Create a table with an index
:
const table = await client.table(data, { index: "Row ID" });
Sourcepub fn terminate(&self) -> ApiResult<JsValue>
pub fn terminate(&self) -> ApiResult<JsValue>
Terminates this Client
, cleaning up any crate::View
handles the
Client
has open as well as its callbacks.
Sourcepub async fn open_table(&self, entity_id: String) -> ApiResult<Table>
pub async fn open_table(&self, entity_id: String) -> ApiResult<Table>
Opens a Table
that is hosted on the perspective_server::Server
that is connected to this Client
.
The name
property of TableInitOptions
is used to identify each
Table
. Table
name
s can be looked up for each Client
via Client::get_hosted_table_names
.
§JavaScript Examples
Get a virtual Table
named “table_one” from this Client
const tables = await client.open_table("table_one");
Sourcepub async fn get_hosted_table_names(&self) -> ApiResult<JsValue>
pub async fn get_hosted_table_names(&self) -> ApiResult<JsValue>
Retrieves the names of all tables that this client has access to.
name
is a string identifier unique to the Table
(per Client
),
which can be used in conjunction with Client::open_table
to get
a Table
instance without the use of Client::table
constructor directly (e.g., one created by another Client
).
§JavaScript Examples
const tables = await client.get_hosted_table_names();
Sourcepub async fn on_hosted_tables_update(
&self,
on_update_js: Function,
) -> ApiResult<u32>
pub async fn on_hosted_tables_update( &self, on_update_js: Function, ) -> ApiResult<u32>
Register a callback which is invoked whenever Client::table
(on this
Client
) or Table::delete
(on a Table
belinging to this
Client
) are called.
Sourcepub async fn remove_hosted_tables_update(&self, update_id: u32) -> ApiResult<()>
pub async fn remove_hosted_tables_update(&self, update_id: u32) -> ApiResult<()>
Remove a callback previously registered via
Client::on_hosted_tables_update
.
Sourcepub async fn system_info(&self) -> ApiResult<JsSystemInfo>
pub async fn system_info(&self) -> ApiResult<JsSystemInfo>
Provides the SystemInfo
struct, implementation-specific metadata
about the [perspective_server::Server
] runtime such as Memory and
CPU usage.
For WebAssembly servers, this method includes the WebAssembly heap size.
§JavaScript Examples
const info = await client.system_info();
Trait Implementations§
Source§impl FromWasmAbi for Client
impl FromWasmAbi for Client
Source§impl IntoWasmAbi for Client
impl IntoWasmAbi for Client
Source§impl LongRefFromWasmAbi for Client
impl LongRefFromWasmAbi for Client
Source§impl OptionFromWasmAbi for Client
impl OptionFromWasmAbi for Client
Source§impl OptionIntoWasmAbi for Client
impl OptionIntoWasmAbi for Client
Source§impl RefFromWasmAbi for Client
impl RefFromWasmAbi for Client
Source§impl RefMutFromWasmAbi for Client
impl RefMutFromWasmAbi for Client
Source§impl TryFromJsValue for Client
impl TryFromJsValue for Client
Source§impl VectorFromWasmAbi for Client
impl VectorFromWasmAbi for Client
Source§impl VectorIntoWasmAbi for Client
impl VectorIntoWasmAbi for Client
impl SupportsConstructor for Client
impl SupportsInstanceProperty for Client
impl SupportsStaticProperty for Client
Auto Trait Implementations§
impl Freeze for Client
impl !RefUnwindSafe for Client
impl !Send for Client
impl !Sync for Client
impl Unpin for Client
impl !UnwindSafe for Client
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
impl<T> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
Source§type Abi = <T as IntoWasmAbi>::Abi
type Abi = <T as IntoWasmAbi>::Abi
IntoWasmAbi::Abi
Source§fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
IntoWasmAbi::into_abi
, except that it may throw and never
return in the case of Err
.