MyProtocolを、enumのみに準拠させられるようにして、enumrawValueを使えるようにすることは可能ですか。
以下のようにMyProtocolenumrawValueを使えるようにしたいです。

protocol MyProtocol {
}

enum MyEnum1: String, MyProtocol {
    case a = "AAA1"
    case b = "BBB1"
}

enum MyEnum2: String, MyProtocol {
    case a = "AAA2"
    case b = "BBB2"
}

enum MyEnum3: String, MyProtocol {
    case a = "AAA3"
    case b = "BBB3"
}

class MyClass {
    func methodA(foo: MyProtocol) {
        print(foo.rawValue) // これが出来るようにしたい
    }

    func methodB() {
        methodA(foo: MyEnum1.a) // "AAA1"
        methodA(foo: MyEnum2.a) // "AAA2"
        methodA(foo: MyEnum3.a) // "AAA3"
    }
}

MyProtocolで独自にrawValを定義することで一応やりたいことはできましたが、全てのenumrawValを書く手間が発生するため、できればrawValueをそのまま使いたいです。

protocol MyProtocol {
    var rawVal: String { get }
}

enum MyEnum1: String, MyProtocol {
    var rawVal: String { return self.rawValue }
    case a = "AAA1"
    case b = "BBB1"
}

class MyClass {
    func methodA(foo: MyProtocol) {
        print(foo.rawVal) // これならできる
    }
}

考えをまとめるとenumにスーパークラスみたいなものを作りたいということなのですが、そもそもProtocolの使い方が間違っていますでしょうか……?