pub struct ScrapeExchangeAdapter { /* private fields */ }Expand description
Pipeline adapter wrapping ScrapeExchangeClient that implements
DataSinkPort and ScrapingService.
Use this type when wiring a pipeline output into Scrape Exchange; the
raw client is available via ScrapeExchangeAdapter::client() for
direct API access.
§Example
use stygian_graph::adapters::scrape_exchange::{ScrapeExchangeAdapter, ScrapeExchangeConfig};
use stygian_graph::ports::data_sink::{DataSinkPort, SinkRecord};
use serde_json::json;
let config = ScrapeExchangeConfig {
api_key_id: "key_id".to_string(),
api_key_secret: "secret".to_string(),
base_url: "https://scrape.exchange/api/".to_string(),
};
// let adapter = ScrapeExchangeAdapter::new(config).await?;Implementations§
Source§impl ScrapeExchangeAdapter
impl ScrapeExchangeAdapter
Sourcepub async fn new(
config: ScrapeExchangeConfig,
) -> Result<Self, ScrapeExchangeError>
pub async fn new( config: ScrapeExchangeConfig, ) -> Result<Self, ScrapeExchangeError>
Create a new adapter and establish an authenticated session.
§Errors
Returns ScrapeExchangeError if authentication fails.
§Example
use stygian_graph::adapters::scrape_exchange::{ScrapeExchangeAdapter, ScrapeExchangeConfig};
// let adapter = ScrapeExchangeAdapter::new(config).await?;Sourcepub fn client(&self) -> &ScrapeExchangeClient
pub fn client(&self) -> &ScrapeExchangeClient
Access the underlying REST client.
§Example
let items = adapter.client().query("me", "web", "pages").await;Trait Implementations§
Source§impl DataSinkPort for ScrapeExchangeAdapter
impl DataSinkPort for ScrapeExchangeAdapter
Source§fn publish<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 SinkRecord,
) -> Pin<Box<dyn Future<Output = Result<SinkReceipt, DataSinkError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn publish<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 SinkRecord,
) -> Pin<Box<dyn Future<Output = Result<SinkReceipt, DataSinkError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Validate and publish a SinkRecord to Scrape Exchange.
§Errors
DataSinkError::ValidationFailed— local validation rejected the record.DataSinkError::RateLimited— API returned 429.DataSinkError::Unauthorized— API returned 401/403.DataSinkError::PublishFailed— any other HTTP error.
Source§fn validate<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 SinkRecord,
) -> Pin<Box<dyn Future<Output = Result<(), DataSinkError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn validate<'life0, 'life1, 'async_trait>(
&'life0 self,
record: &'life1 SinkRecord,
) -> Pin<Box<dyn Future<Output = Result<(), DataSinkError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Validate the record locally without publishing.
§Errors
DataSinkError::ValidationFailed if the record is structurally invalid.
Source§fn health_check<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), DataSinkError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn health_check<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), DataSinkError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Check that the Scrape Exchange API is reachable.
§Errors
DataSinkError::PublishFailed if the health endpoint is unreachable.
Source§impl ScrapingService for ScrapeExchangeAdapter
impl ScrapingService for ScrapeExchangeAdapter
Source§fn execute<'life0, 'async_trait>(
&'life0 self,
input: ServiceInput,
) -> Pin<Box<dyn Future<Output = DomainResult<ServiceOutput>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn execute<'life0, 'async_trait>(
&'life0 self,
input: ServiceInput,
) -> Pin<Box<dyn Future<Output = DomainResult<ServiceOutput>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Query Scrape Exchange for data matching the URL’s path components.
Expects input.url to be of the form
scrape-exchange://uploader/platform/entity or a full API URL path.
Falls back to using the whole URL string as an item-ID lookup.
§Errors
Returns a StygianError wrapping any API transport failure.
Auto Trait Implementations§
impl Freeze for ScrapeExchangeAdapter
impl !RefUnwindSafe for ScrapeExchangeAdapter
impl Send for ScrapeExchangeAdapter
impl Sync for ScrapeExchangeAdapter
impl Unpin for ScrapeExchangeAdapter
impl UnsafeUnpin for ScrapeExchangeAdapter
impl !UnwindSafe for ScrapeExchangeAdapter
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute] value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi [Quirk] value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition] value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);