API: Add GetNetClassForNets; handle implicit netclasses

This commit is contained in:
Jon Evans
2024-12-31 17:51:19 -05:00
parent 151b1141f7
commit d8b8d8aa3c
5 changed files with 73 additions and 0 deletions
+27
View File
@@ -76,6 +76,8 @@ API_HANDLER_PCB::API_HANDLER_PCB( PCB_EDIT_FRAME* aFrame ) :
registerHandler<InteractiveMoveItems, Empty>( &API_HANDLER_PCB::handleInteractiveMoveItems );
registerHandler<GetNets, NetsResponse>( &API_HANDLER_PCB::handleGetNets );
registerHandler<GetNetClassForNets, NetClassForNetsResponse>(
&API_HANDLER_PCB::handleGetNetClassForNets );
registerHandler<RefillZones, Empty>( &API_HANDLER_PCB::handleRefillZones );
registerHandler<SaveDocumentToString, SavedDocumentResponse>(
@@ -830,6 +832,31 @@ HANDLER_RESULT<NetsResponse> API_HANDLER_PCB::handleGetNets( const HANDLER_CONTE
}
HANDLER_RESULT<NetClassForNetsResponse> API_HANDLER_PCB::handleGetNetClassForNets(
const HANDLER_CONTEXT<GetNetClassForNets>& aCtx )
{
NetClassForNetsResponse response;
BOARD* board = frame()->GetBoard();
NETINFO_LIST nets = board->GetNetInfo();
google::protobuf::Any any;
for( const board::types::Net& net : aCtx.Request.net() )
{
NETINFO_ITEM* netInfo = nets.GetNetItem( wxString::FromUTF8( net.name() ) );
if( !netInfo )
continue;
netInfo->GetNetClass()->Serialize( any );
auto [pair, rc] = response.mutable_classes()->insert( { net.name(), {} } );
any.UnpackTo( &pair->second );
}
return response;
}
HANDLER_RESULT<Empty> API_HANDLER_PCB::handleRefillZones( const HANDLER_CONTEXT<RefillZones>& aCtx )
{
if( std::optional<ApiResponseStatus> busy = checkForBusy() )