#pragma once
#include <cudf/datetime.hpp>
#include <cudf/column/column.hpp>
#include <memory>
#include "rust/cxx.h"
#include "column_shim.h"
#include "scalar_shim.h"
namespace cudf_shims {
std::unique_ptr<OwnedColumn> extract_year(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_month(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_day(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_hour(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_minute(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_second(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_weekday(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_day_of_year(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> last_day_of_month(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> add_calendrical_months_scalar(
const OwnedColumn& col, const OwnedScalar& months);
std::unique_ptr<OwnedColumn> add_calendrical_months_column(
const OwnedColumn& col, const OwnedColumn& months);
std::unique_ptr<OwnedColumn> is_leap_year(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> days_in_month(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> extract_quarter(const OwnedColumn& col);
std::unique_ptr<OwnedColumn> ceil_datetimes(const OwnedColumn& col, int32_t freq);
std::unique_ptr<OwnedColumn> floor_datetimes(const OwnedColumn& col, int32_t freq);
std::unique_ptr<OwnedColumn> round_datetimes(const OwnedColumn& col, int32_t freq);
}