use elliptic_curve::array::typenum::{NonZero, Unsigned};
use elliptic_curve::array::{Array, ArraySize};
use elliptic_curve::group::cofactor::CofactorGroup;
use elliptic_curve::ops::Reduce;
use elliptic_curve::{CurveArithmetic, ProjectivePoint};
pub trait MapToCurve:
CurveArithmetic<ProjectivePoint: CofactorGroup<Subgroup = Self::ProjectivePoint>>
{
type SecurityLevel: Unsigned;
type FieldElement: Reduce<Array<u8, Self::Length>> + Default + Copy;
type Length: ArraySize + NonZero;
fn map_to_curve(element: Self::FieldElement) -> ProjectivePoint<Self>;
}