/*
 * Copyright (c) 2022 CEA LIST.
 *
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License 2.0
 *  which accompanies this distribution, and is available at
 *  https://www.eclipse.org/legal/epl-2.0/
 *
 *  SPDX-License-Identifier: EPL-2.0
 *  
 *  Contributors:
 *    Saadia Dhouib (CEA LIST) saadia.dhouib@cea.fr
 *    Fadwa Tmar (CEA LIST) fadwa.tmar@cea.fr 
 *******************************************************************************/

library Uml2OpcuaBlackbox;

blackbox helper saySomething() : String;

// returns a dictionary with entries like 
// "HasModellingRule","i=37"
// "MyOwnObject","s=someBrowsename"
// ...
blackbox helper readNodeIdsCsv(filename : String) : Dict(String,String);