use super::ApiResult; use crate::helpers::get_beacon_chain_from_request; use crate::response_builder::ResponseBuilder; use crate::ApiError; use beacon_chain::BeaconChainTypes; use eth2_config::Eth2Config; use hyper::{Body, Request}; use std::sync::Arc; use types::EthSpec; /// HTTP handler to return the full spec object. pub fn get_spec(req: Request) -> ApiResult { let beacon_chain = get_beacon_chain_from_request::(&req)?; ResponseBuilder::new(&req)?.body_no_ssz(&beacon_chain.spec) } /// HTTP handler to return the full Eth2Config object. pub fn get_eth2_config(req: Request) -> ApiResult { let eth2_config = req .extensions() .get::>() .ok_or_else(|| ApiError::ServerError("Eth2Config extension missing".to_string()))?; ResponseBuilder::new(&req)?.body_no_ssz(eth2_config.as_ref()) } /// HTTP handler to return the full spec object. pub fn get_slots_per_epoch(req: Request) -> ApiResult { ResponseBuilder::new(&req)?.body(&T::EthSpec::slots_per_epoch()) }