zfin/src/models/dividend.zig

39 lines
1.2 KiB
Zig

const std = @import("std");
const Date = @import("../Date.zig");
pub const DividendType = enum {
regular,
special,
supplemental,
irregular,
unknown,
};
/// A single dividend payment record.
pub const Dividend = struct {
/// Date the stock begins trading without the dividend
ex_date: Date,
/// Date the dividend is paid (may be null if unknown)
pay_date: ?Date = null,
/// Date of record for eligibility
record_date: ?Date = null,
/// Cash amount per share
amount: f64,
/// How many times per year this dividend is expected
frequency: ?u8 = null,
/// Classification of the dividend
type: DividendType = .unknown,
/// Currency code (e.g., "USD"). Heap-allocated; freed by deinit().
currency: ?[]const u8 = null,
/// Free any owned string fields.
pub fn deinit(self: Dividend, allocator: std.mem.Allocator) void {
if (self.currency) |c| allocator.free(c);
}
/// Free a slice of dividends, calling deinit on each element first.
pub fn freeSlice(allocator: std.mem.Allocator, divs: []const Dividend) void {
for (divs) |d| d.deinit(allocator);
allocator.free(divs);
}
};