libinput-rs 0.3.11

100% drop-in Rust replacement for the libinput 1.31.3 C ABI and tools
Documentation
module ProfileSelection

%default total

public export
data Profile
  = P53Elan | X230Touchpad | ThinkPadTrackpoint | GenericTouchpad

public export
data Evidence
  = P53ElanDevice | X230Device | ThinkPadTrackpointDevice
  | GenericTouchpadDevice | UnknownDevice

public export
select : Evidence -> Maybe Profile
select P53ElanDevice = Just P53Elan
select X230Device = Just X230Touchpad
select ThinkPadTrackpointDevice = Just ThinkPadTrackpoint
select GenericTouchpadDevice = Just GenericTouchpad
select UnknownDevice = Nothing

public export
data Selected : Evidence -> Profile -> Type where
  Chosen : select evidence = Just profile -> Selected evidence profile

justInjective : {left, right : value} -> Just left = Just right -> left = right
justInjective Refl = Refl

public export
selectedUnique : {evidence : Evidence} -> {left, right : Profile} ->
                 Selected evidence left -> Selected evidence right -> left = right
selectedUnique (Chosen leftSelected) (Chosen rightSelected) =
  justInjective (trans (sym leftSelected) rightSelected)

public export
selectIsTotal : (evidence : Evidence) -> Maybe Profile
selectIsTotal evidence = select evidence