/*
 * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */
connector GenericRPC {
    from Procedure;
    to Procedure;
}

procedure Hello {
    char getchar(void);
    int putchar(in char x);
}

component Foo {
    control;
    uses Hello s;
}

component Bar {
    provides Hello t;
}

assembly {
  composition {
    component Foo foo;
    component Bar bar;
    connection GenericRPC con(from foo.s, to bar.t);
  }
}
