class ActionRaw implements Sc2ApiSerializable<Raw.ActionRaw>, GeneralizableAbility<ActionRaw> {

    @Override
    public Raw.ActionRaw toSc2Api() {
        Raw.ActionRaw.Builder aSc2ApiActionRaw = Raw.ActionRaw.newBuilder();

        getUnitCommand().map(ActionRawUnitCommand::toSc2Api).ifPresent(aSc2ApiActionRaw::setUnitCommand);
        getCameraMove().map(ActionRawCameraMove::toSc2Api).ifPresent(aSc2ApiActionRaw::setCameraMove);
        getToggleAutocast().map(ActionRawToggleAutocast::toSc2Api).ifPresent(aSc2ApiActionRaw::setToggleAutocast);

        return aSc2ApiActionRaw.build();
    }

    private  ActionRaw(Raw.ActionRaw sc2ApiActionRaw);
    private  ActionRaw(ActionRawUnitCommand unitCommand);
    private  ActionRaw(ActionRawCameraMove cameraMove);
    private  ActionRaw(ActionRawToggleAutocast toggleAutocast);

}