Struct perspective_client::Client
source · pub struct Client { /* private fields */ }Expand description
An instance of a Client is a unique 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
sourcepub fn new_with_callback<T>(send_request: T) -> Self
pub fn new_with_callback<T>(send_request: T) -> Self
Create a new client instance with a closure that handles message
dispatch. See Client::new for details.
sourcepub fn new<T>(client_handler: T) -> Self
pub fn new<T>(client_handler: T) -> Self
Create a new Client instance with ClientHandler.
sourcepub async fn handle_response<'a>(&'a self, msg: &'a [u8]) -> ClientResult<bool>
pub async fn handle_response<'a>(&'a self, msg: &'a [u8]) -> ClientResult<bool>
Handle a message from the external message queue.
Client::handle_response is part of the low-level message-handling
API necessary to implement new transports for a Client
connection to a local-or-remote perspective_server::Server, and
doesn’t generally need to be called directly by “users” of a
Client once connected.
pub async fn init(&self) -> ClientResult<()>
sourcepub async fn table(
&self,
input: TableData,
options: TableInitOptions,
) -> ClientResult<Table>
pub async fn table( &self, input: TableData, options: TableInitOptions, ) -> ClientResult<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
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 resultingTablecan store.index- The column name to use as an index column. If thisTableis 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.
§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"));
Create a table with an index:
const table = await client.table(data, { index: "Row ID" });
§Examples
Load a CSV from a String:
let opts = TableInitOptions::default();
let data = TableData::Update(UpdateData::Csv("x,y\n1,2\n3,4".into()));
let table = client.table(data, opts).await?;sourcepub async fn open_table(&self, entity_id: String) -> ClientResult<Table>
pub async fn open_table(&self, entity_id: String) -> ClientResult<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 names 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");
§Python Examples
tables = client.open_table("table_one");
§Examples
let tables = client.open_table("table_one").await;sourcepub async fn get_hosted_table_names(&self) -> ClientResult<Vec<String>>
pub async fn get_hosted_table_names(&self) -> ClientResult<Vec<String>>
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();
§Python Examples
tables = client.get_hosted_table_names();
§Examples
let tables = client.get_hosted_table_names().await;sourcepub async fn system_info(&self) -> ClientResult<SystemInfo>
pub async fn system_info(&self) -> ClientResult<SystemInfo>
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§
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)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 more