throw new ByteSequenceTrimException(original, bitWidth);
"Size mismatch for criterion %s: %s", criterion.type(), e.getMessage())); } catch (CriterionTranslatorException e) { throw new PiTranslationException(format(
"Size mismatch for field %s: %s", fieldMatch.fieldId(), e.getMessage()));
private static PiTableAction checkPiAction(PiAction piAction, PiTableModel table) throws PiTranslationException { // Table supports this action? PiActionModel actionModel = table.action(piAction.id()).orElseThrow( () -> new PiTranslationException(format("Not such action '%s' for table '%s'", piAction.id(), table.id()))); // Is the number of runtime parameters correct? if (actionModel.params().size() != piAction.parameters().size()) { throw new PiTranslationException(format( "Wrong number of runtime parameters for action '%s', expected %d but found %d", actionModel.id(), actionModel.params().size(), piAction.parameters().size())); } // Forge a new action instance with well-sized parameters. // The same comment as in typeCheckFieldMatch() about duplicating field match instances applies here. PiAction.Builder newActionBuilder = PiAction.builder().withId(piAction.id()); for (PiActionParam param : piAction.parameters()) { PiActionParamModel paramModel = actionModel.param(param.id()) .orElseThrow(() -> new PiTranslationException(format( "Not such parameter '%s' for action '%s'", param.id(), actionModel))); try { newActionBuilder.withParameter(new PiActionParam(param.id(), param.value().fit(paramModel.bitWidth()))); } catch (ByteSequenceTrimException e) { throw new PiTranslationException(format( "Size mismatch for parameter '%s' of action '%s': %s", param.id(), piAction.id(), e.getMessage())); } } return newActionBuilder.build(); }