Skip to main content

tvscreener/core/
crypto.rs

1// Copyright 2026 tvscreener-rs contributors
2// SPDX-License-Identifier: Apache-2.0
3
4//! [`CryptoScreener`] (`TradingView` subtype `crypto`).
5//!
6//! Default crypto fields, sort, and `price_conversion` misc.
7
8use super::Screener;
9use crate::field::{crypto_volume_24h_in_usd, default_crypto_fields};
10use serde_json::json;
11
12/// Crypto screener with asset-class defaults
13#[derive(Debug, Clone)]
14pub struct CryptoScreener {
15    inner: Screener,
16}
17
18impl CryptoScreener {
19    /// Creates a screener with default crypto fields and sort by 24h USD volume.
20    pub fn new() -> Self {
21        let mut inner = Screener::new("crypto");
22        inner.set_url(crate::util::get_url("crypto"));
23        inner.set_all_fields_fn(default_crypto_fields);
24        inner.select(default_crypto_fields());
25        inner.sort_by(crypto_volume_24h_in_usd().field_name, false);
26        inner.add_misc("price_conversion", json!({ "to_symbol": false }));
27        Self { inner }
28    }
29}
30
31impl_typed_screener_common!(CryptoScreener);