/*
 * Copyright 2017, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

import <std_connector.camkes>;

procedure Swapper {
  unsigned int swap(inout int a, inout int b);
}

component Client { control; uses Swapper cs; }

component Service {  provides Swapper ss;  }

assembly {
  composition {
    component Client c;
    component Service s;
    connection seL4RPCCall conn(from c.cs, to s.ss);
  }
}
