// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file was auto-generated by the vanadium vdl tool.
var vdl = require('../../../../../../../../../vdl');






module.exports = {};



// Types:




// Consts:



// Errors:



// Services:

  
    
function Exp(){}
module.exports.Exp = Exp;

    
      
Exp.prototype.exp = function(ctx, serverCall, x) {
  throw new Error('Method Exp not implemented');
};
     

    
Exp.prototype._serviceDescription = {
  name: 'Exp',
  pkgPath: 'v.io/x/ref/lib/vdl/testdata/arith/exp',
  doc: "",
  embeds: [],
  methods: [
    
      
    {
    name: 'Exp',
    doc: "",
    inArgs: [{
      name: 'x',
      doc: "",
      type: vdl.types.FLOAT64
    },
    ],
    outArgs: [{
      name: '',
      doc: "",
      type: vdl.types.FLOAT64
    },
    ],
    inStream: null,
    outStream: null,
    tags: []
  },
     
  ]
};

   
 


