1/*
2 * Copyright (C) 2019 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#pragma once
27
28#if ENABLE(SPEECH_SYNTHESIS)
29
30namespace WebKit {
31
32struct WebSpeechSynthesisVoice {
33 String voiceURI;
34 String name;
35 String lang;
36 bool localService { false };
37 bool defaultLang { false };
38
39 template<class Encoder> void encode(Encoder&) const;
40 template<class Decoder> static Optional<WebSpeechSynthesisVoice> decode(Decoder&);
41};
42
43template<class Encoder>
44void WebSpeechSynthesisVoice::encode(Encoder& encoder) const
45{
46 encoder << voiceURI
47 << name
48 << lang
49 << localService
50 << defaultLang;
51}
52
53template<class Decoder>
54Optional<WebSpeechSynthesisVoice> WebSpeechSynthesisVoice::decode(Decoder& decoder)
55{
56 Optional<String> voiceURI;
57 decoder >> voiceURI;
58 if (!voiceURI)
59 return WTF::nullopt;
60
61 Optional<String> name;
62 decoder >> name;
63 if (!name)
64 return WTF::nullopt;
65
66 Optional<String> lang;
67 decoder >> lang;
68 if (!lang)
69 return WTF::nullopt;
70
71 Optional<bool> localService;
72 decoder >> localService;
73 if (!localService)
74 return WTF::nullopt;
75
76 Optional<bool> defaultLang;
77 decoder >> defaultLang;
78 if (!defaultLang)
79 return WTF::nullopt;
80
81 return {{ WTFMove(*voiceURI), WTFMove(*name), WTFMove(*lang), WTFMove(*localService), WTFMove(*defaultLang) }};}
82
83} // namespace WebKit
84
85#endif // ENABLE(SPEECH_SYNTHESIS)
86