class ActionSpatial implements Sc2ApiSerializable<Spatial.ActionSpatial>, GeneralizableAbility<ActionSpatial> {

    @Override
    public ActionSpatial generalizeAbility(UnaryOperator<Ability> generalize) {
        return getUnitCommand()
                .map(command -> ActionSpatial.of(command.generalizeAbility(generalize)))
                .orElse(this);
    }

    private  ActionSpatial(Spatial.ActionSpatial sc2ApiActionSpatial);
    private  ActionSpatial(ActionSpatialUnitCommand unitCommand);
    private  ActionSpatial(ActionSpatialCameraMove cameraMove);
    private  ActionSpatial(ActionSpatialUnitSelectionPoint unitSelectionPoint);
    private  ActionSpatial(ActionSpatialUnitSelectionRect unitSelectionRect);

}