Make instance GatewayOptions configurable for library consumers (#555)
* Make instance GatewayOptions configurable for library consumers * Update example in README
This commit is contained in:
parent
d846ce9948
commit
76186a08f0
|
@ -57,7 +57,7 @@ use chorus::instance::Instance;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let instance = Instance::new("https://example.com")
|
let instance = Instance::new("https://example.com", None)
|
||||||
.await
|
.await
|
||||||
.expect("Failed to connect to the Spacebar server");
|
.expect("Failed to connect to the Spacebar server");
|
||||||
// You can create as many instances of `Instance` as you want, but each `Instance` should likely be unique.
|
// You can create as many instances of `Instance` as you want, but each `Instance` should likely be unique.
|
||||||
|
|
|
@ -6,7 +6,7 @@ use chorus::instance::Instance;
|
||||||
|
|
||||||
#[tokio::main(flavor = "current_thread")]
|
#[tokio::main(flavor = "current_thread")]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let instance = Instance::new("https://example.com/")
|
let instance = Instance::new("https://example.com/", None)
|
||||||
.await
|
.await
|
||||||
.expect("Failed to connect to the Spacebar server");
|
.expect("Failed to connect to the Spacebar server");
|
||||||
dbg!(instance.instance_info);
|
dbg!(instance.instance_info);
|
||||||
|
|
|
@ -7,7 +7,7 @@ use chorus::types::LoginSchema;
|
||||||
|
|
||||||
#[tokio::main(flavor = "current_thread")]
|
#[tokio::main(flavor = "current_thread")]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let mut instance = Instance::new("https://example.com/")
|
let mut instance = Instance::new("https://example.com/", None)
|
||||||
.await
|
.await
|
||||||
.expect("Failed to connect to the Spacebar server");
|
.expect("Failed to connect to the Spacebar server");
|
||||||
// Assume, you already have an account created on this instance. Registering an account works
|
// Assume, you already have an account created on this instance. Registering an account works
|
||||||
|
|
|
@ -69,8 +69,13 @@ impl Instance {
|
||||||
|
|
||||||
/// Creates a new [`Instance`] from the [relevant instance urls](UrlBundle).
|
/// Creates a new [`Instance`] from the [relevant instance urls](UrlBundle).
|
||||||
///
|
///
|
||||||
|
/// If `options` is `None`, the default [`GatewayOptions`] will be used.
|
||||||
|
///
|
||||||
/// To create an Instance from one singular url, use [`Instance::new()`].
|
/// To create an Instance from one singular url, use [`Instance::new()`].
|
||||||
pub async fn from_url_bundle(urls: UrlBundle) -> ChorusResult<Instance> {
|
pub async fn from_url_bundle(
|
||||||
|
urls: UrlBundle,
|
||||||
|
options: Option<GatewayOptions>,
|
||||||
|
) -> ChorusResult<Instance> {
|
||||||
let is_limited: Option<LimitsConfiguration> = Instance::is_limited(&urls.api).await?;
|
let is_limited: Option<LimitsConfiguration> = Instance::is_limited(&urls.api).await?;
|
||||||
let limit_information;
|
let limit_information;
|
||||||
|
|
||||||
|
@ -89,7 +94,7 @@ impl Instance {
|
||||||
instance_info: GeneralConfiguration::default(),
|
instance_info: GeneralConfiguration::default(),
|
||||||
limits_information: limit_information,
|
limits_information: limit_information,
|
||||||
client: Client::new(),
|
client: Client::new(),
|
||||||
gateway_options: GatewayOptions::default(),
|
gateway_options: options.unwrap_or_default(),
|
||||||
};
|
};
|
||||||
instance.instance_info = match instance.general_configuration_schema().await {
|
instance.instance_info = match instance.general_configuration_schema().await {
|
||||||
Ok(schema) => schema,
|
Ok(schema) => schema,
|
||||||
|
@ -103,10 +108,12 @@ impl Instance {
|
||||||
|
|
||||||
/// Creates a new [`Instance`] by trying to get the [relevant instance urls](UrlBundle) from a root url.
|
/// Creates a new [`Instance`] by trying to get the [relevant instance urls](UrlBundle) from a root url.
|
||||||
///
|
///
|
||||||
|
/// If `options` is `None`, the default [`GatewayOptions`] will be used.
|
||||||
|
///
|
||||||
/// Shorthand for `Instance::from_url_bundle(UrlBundle::from_root_domain(root_domain).await?)`.
|
/// Shorthand for `Instance::from_url_bundle(UrlBundle::from_root_domain(root_domain).await?)`.
|
||||||
pub async fn new(root_url: &str) -> ChorusResult<Instance> {
|
pub async fn new(root_url: &str, options: Option<GatewayOptions>) -> ChorusResult<Instance> {
|
||||||
let urls = UrlBundle::from_root_url(root_url).await?;
|
let urls = UrlBundle::from_root_url(root_url).await?;
|
||||||
Instance::from_url_bundle(urls).await
|
Instance::from_url_bundle(urls, options).await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn is_limited(api_url: &str) -> ChorusResult<Option<LimitsConfiguration>> {
|
pub async fn is_limited(api_url: &str) -> ChorusResult<Option<LimitsConfiguration>> {
|
||||||
|
@ -199,10 +206,9 @@ impl ChorusUser {
|
||||||
let settings = Arc::new(RwLock::new(UserSettings::default()));
|
let settings = Arc::new(RwLock::new(UserSettings::default()));
|
||||||
let object = Arc::new(RwLock::new(User::default()));
|
let object = Arc::new(RwLock::new(User::default()));
|
||||||
let wss_url = &instance.read().unwrap().urls.wss.clone();
|
let wss_url = &instance.read().unwrap().urls.wss.clone();
|
||||||
|
let gateway_options = instance.read().unwrap().gateway_options;
|
||||||
// Dummy gateway object
|
// Dummy gateway object
|
||||||
let gateway = Gateway::spawn(wss_url, GatewayOptions::default())
|
let gateway = Gateway::spawn(wss_url, gateway_options).await.unwrap();
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
ChorusUser {
|
ChorusUser {
|
||||||
token: token.to_string(),
|
token: token.to_string(),
|
||||||
belongs_to: instance.clone(),
|
belongs_to: instance.clone(),
|
||||||
|
|
|
@ -66,7 +66,9 @@ pub(crate) async fn setup() -> TestBundle {
|
||||||
)
|
)
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
let instance = Instance::new("http://localhost:3001/api").await.unwrap();
|
let instance = Instance::new("http://localhost:3001/api", None)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
// Requires the existence of the below user.
|
// Requires the existence of the below user.
|
||||||
let reg = RegisterSchema {
|
let reg = RegisterSchema {
|
||||||
username: "integrationtestuser".into(),
|
username: "integrationtestuser".into(),
|
||||||
|
|
Loading…
Reference in New Issue