Skip to main content

fmp_rust_sdk/models/
events.rs

1//! Company events, earnings calls, and news.
2
3use chrono::{NaiveDate, NaiveDateTime};
4use serde::{Deserialize, Serialize};
5
6/// Earnings announced or scheduled by `earnings` and `earnings-calendar`.
7#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
8#[serde(rename_all = "camelCase")]
9pub struct Earnings {
10    #[serde(deserialize_with = "super::non_empty_string")]
11    pub symbol: String,
12    pub date: NaiveDate,
13    pub eps_actual: Option<f64>,
14    pub eps_estimated: Option<f64>,
15    pub revenue_actual: Option<f64>,
16    pub revenue_estimated: Option<f64>,
17    #[serde(default, deserialize_with = "super::optional_date")]
18    pub last_updated: Option<NaiveDate>,
19}
20
21/// A dividend from `dividends` or `dividends-calendar`.
22#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
23#[serde(rename_all = "camelCase")]
24pub struct Dividend {
25    #[serde(deserialize_with = "super::non_empty_string")]
26    pub symbol: String,
27    /// Ex-dividend date.
28    pub date: NaiveDate,
29    #[serde(default, deserialize_with = "super::optional_date")]
30    pub record_date: Option<NaiveDate>,
31    #[serde(default, deserialize_with = "super::optional_date")]
32    pub payment_date: Option<NaiveDate>,
33    #[serde(default, deserialize_with = "super::optional_date")]
34    pub declaration_date: Option<NaiveDate>,
35    pub adj_dividend: Option<f64>,
36    pub dividend: f64,
37    #[serde(rename = "yield")]
38    pub dividend_yield: Option<f64>,
39    pub frequency: Option<String>,
40}
41
42/// A split event from `splits` or `splits-calendar`.
43#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
44#[serde(rename_all = "camelCase")]
45pub struct StockSplit {
46    #[serde(deserialize_with = "super::non_empty_string")]
47    pub symbol: String,
48    pub date: NaiveDate,
49    pub numerator: f64,
50    pub denominator: f64,
51    pub split_type: Option<String>,
52}
53
54/// A complete call transcript from `earning-call-transcript`.
55#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
56pub struct EarningsTranscript {
57    #[serde(deserialize_with = "super::non_empty_string")]
58    pub symbol: String,
59    pub quarter: u8,
60    pub year: u16,
61    #[serde(with = "super::timestamp")]
62    pub date: NaiveDateTime,
63    pub content: String,
64}
65
66/// An article from the Stable news endpoints. General news can have no symbol.
67#[derive(Clone, Debug, PartialEq, Deserialize, Serialize)]
68#[serde(rename_all = "camelCase")]
69pub struct NewsArticle {
70    pub symbol: Option<String>,
71    #[serde(with = "super::timestamp")]
72    pub published_date: NaiveDateTime,
73    #[serde(deserialize_with = "super::non_empty_string")]
74    pub title: String,
75    pub publisher: Option<String>,
76    pub image: Option<String>,
77    pub site: Option<String>,
78    pub text: Option<String>,
79    #[serde(deserialize_with = "super::non_empty_string")]
80    pub url: String,
81}