/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
*/
union nested_choice switch(long) {
    case 0:
        string e;
    case 1:
        float f;
};
enum color {
    color_RED,
    color_GREEN,
    color_BLUE
};
struct structOne {
    short s;
    long l;
};
union unionTwo switch(long) {
    case 0:
        nested_choice nested_choice_f;
    case 1:
        color color_f;
    case 2:
        structOne structOne_f;
};
struct obj {
    string s;
};
typedef obj S1[25];
struct obj2 {
    S1 aa;
};
union unionThree switch(long) {
    case 0:
        unionTwo unionTwo_f;
    case 1:
        obj2 obj2_f;
};
union _omg_nested_choice switch(long) {
    case 0:
        string e;
    case 1:
        float f;
};
union _omg_unionTwo switch(long) {
    case 0:
        nested_choice nested_choice_f;
    case 1:
        color color_f;
    case 2:
        structOne structOne_f;
};
union _omg_unionThree switch(long) {
    case 0:
        unionTwo unionTwo_f;
    case 1:
        obj2 obj2_f;
};
struct structTwo {
    color white;
    nested_choice nested_choice_f;
    structOne structOne_f;
};
interface X {
    struct op_unionTwoResult {
        ::unionTwo return;
        ::unionTwo p2;
        ::unionTwo p3;
    };
    struct op_obj2Result {
        ::obj2 return;
        ::obj2 p2;
        ::obj2 p3;
    };
    struct op_structTwo {
        ::structTwo p1;
        ::structTwo p2;
    };
    struct op_color {
        ::color p1;
        ::color p2;
    };
    struct op_unionThree {
        ::unionThree p1;
        ::unionThree p2;
    };
    struct op_obj2 {
        ::obj2 p1;
        ::obj2 p2;
    };
    struct op_colorResult {
        ::color return;
        ::color p2;
        ::color p3;
    };
    struct op_unionThreeResult {
        ::unionThree return;
        ::unionThree p2;
        ::unionThree p3;
    };
    struct op_unionTwo {
        ::unionTwo p1;
        ::unionTwo p2;
    };
    struct op_structTwoResult {
        ::structTwo return;
        ::structTwo p2;
        ::structTwo p3;
    };
    ::obj2
    op_obj2(
        in ::obj2 p1,
        out ::obj2 p3,
        inout ::obj2 p2
    );
    ::structTwo
    op_structTwo(
        in ::structTwo p1,
        out ::structTwo p3,
        inout ::structTwo p2
    );
    ::unionTwo
    op_unionTwo(
        in ::unionTwo p1,
        out ::unionTwo p3,
        inout ::unionTwo p2
    );
    ::color
    op_color(
        in ::color p1,
        out ::color p3,
        inout ::color p2
    );
    ::unionThree
    op_unionThree(
        in ::unionThree p1,
        out ::unionThree p3,
        inout ::unionThree p2
    );
};
