Add a mood parser and serialiser.

Emmanuel Gil Peyrot created

Change summary

src/lib.rs  |   3 
src/mood.rs | 284 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/ns.rs   |   3 
3 files changed, 290 insertions(+)

Detailed changes

src/lib.rs 🔗

@@ -89,6 +89,9 @@ pub mod chatstates;
 /// XEP-0092: Software Version
 pub mod version;
 
+/// XEP-0107: User Mood
+pub mod mood;
+
 /// XEP-0115: Entity Capabilities
 pub mod caps;
 

src/mood.rs 🔗

@@ -0,0 +1,284 @@
+// Copyright (c) 2017 Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
+//
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+#![deny(missing_docs)]
+
+use try_from::TryFrom;
+
+use minidom::Element;
+
+use error::Error;
+
+use ns;
+
+generate_element_enum!(
+    /// Enum representing all of the possible values of the XEP-0107 moods.
+    MoodEnum, "mood", ns::MOOD, {
+        /// Impressed with fear or apprehension; in fear; apprehensive.
+        Afraid => "afraid",
+
+        /// Astonished; confounded with fear, surprise or wonder.
+        Amazed => "amazed",
+
+        /// Inclined to love; having a propensity to love, or to sexual enjoyment; loving, fond, affectionate, passionate, lustful, sexual, etc.
+        Amorous => "amorous",
+
+        /// Displaying or feeling anger, i.e., a strong feeling of displeasure, hostility or antagonism towards someone or something, usually combined with an urge to harm.
+        Angry => "angry",
+
+        /// To be disturbed or irritated, especially by continued or repeated acts.
+        Annoyed => "annoyed",
+
+        /// Full of anxiety or disquietude; greatly concerned or solicitous, esp. respecting something future or unknown; being in painful suspense.
+        Anxious => "anxious",
+
+        /// To be stimulated in one's feelings, especially to be sexually stimulated.
+        Aroused => "aroused",
+
+        /// Feeling shame or guilt.
+        Ashamed => "ashamed",
+
+        /// Suffering from boredom; uninterested, without attention.
+        Bored => "bored",
+
+        /// Strong in the face of fear; courageous.
+        Brave => "brave",
+
+        /// Peaceful, quiet.
+        Calm => "calm",
+
+        /// Taking care or caution; tentative.
+        Cautious => "cautious",
+
+        /// Feeling the sensation of coldness, especially to the point of discomfort.
+        Cold => "cold",
+
+        /// Feeling very sure of or positive about something, especially about one's own capabilities.
+        Confident => "confident",
+
+        /// Chaotic, jumbled or muddled.
+        Confused => "confused",
+
+        /// Feeling introspective or thoughtful.
+        Contemplative => "contemplative",
+
+        /// Pleased at the satisfaction of a want or desire; satisfied.
+        Contented => "contented",
+
+        /// Grouchy, irritable; easily upset.
+        Cranky => "cranky",
+
+        /// Feeling out of control; feeling overly excited or enthusiastic.
+        Crazy => "crazy",
+
+        /// Feeling original, expressive, or imaginative.
+        Creative => "creative",
+
+        /// Inquisitive; tending to ask questions, investigate, or explore.
+        Curious => "curious",
+
+        /// Feeling sad and dispirited.
+        Dejected => "dejected",
+
+        /// Severely despondent and unhappy.
+        Depressed => "depressed",
+
+        /// Defeated of expectation or hope; let down.
+        Disappointed => "disappointed",
+
+        /// Filled with disgust; irritated and out of patience.
+        Disgusted => "disgusted",
+
+        /// Feeling a sudden or complete loss of courage in the face of trouble or danger.
+        Dismayed => "dismayed",
+
+        /// Having one's attention diverted; preoccupied.
+        Distracted => "distracted",
+
+        /// Having a feeling of shameful discomfort.
+        Embarrassed => "embarrassed",
+
+        /// Feeling pain by the excellence or good fortune of another.
+        Envious => "envious",
+
+        /// Having great enthusiasm.
+        Excited => "excited",
+
+        /// In the mood for flirting.
+        Flirtatious => "flirtatious",
+
+        /// Suffering from frustration; dissatisfied, agitated, or discontented because one is unable to perform an action or fulfill a desire.
+        Frustrated => "frustrated",
+
+        /// Feeling appreciation or thanks.
+        Grateful => "grateful",
+
+        /// Feeling very sad about something, especially something lost; mournful; sorrowful.
+        Grieving => "grieving",
+
+        /// Unhappy and irritable.
+        Grumpy => "grumpy",
+
+        /// Feeling responsible for wrongdoing; feeling blameworthy.
+        Guilty => "guilty",
+
+        /// Experiencing the effect of favourable fortune; having the feeling arising from the consciousness of well-being or of enjoyment; enjoying good of any kind, as peace, tranquillity, comfort; contented; joyous.
+        Happy => "happy",
+
+        /// Having a positive feeling, belief, or expectation that something wished for can or will happen.
+        Hopeful => "hopeful",
+
+        /// Feeling the sensation of heat, especially to the point of discomfort.
+        Hot => "hot",
+
+        /// Having or showing a modest or low estimate of one's own importance; feeling lowered in dignity or importance.
+        Humbled => "humbled",
+
+        /// Feeling deprived of dignity or self-respect.
+        Humiliated => "humiliated",
+
+        /// Having a physical need for food.
+        Hungry => "hungry",
+
+        /// Wounded, injured, or pained, whether physically or emotionally.
+        Hurt => "hurt",
+
+        /// Favourably affected by something or someone.
+        Impressed => "impressed",
+
+        /// Feeling amazement at something or someone; or feeling a combination of fear and reverence.
+        InAwe => "in_awe",
+
+        /// Feeling strong affection, care, liking, or attraction..
+        InLove => "in_love",
+
+        /// Showing anger or indignation, especially at something unjust or wrong.
+        Indignant => "indignant",
+
+        /// Showing great attention to something or someone; having or showing interest.
+        Interested => "interested",
+
+        /// Under the influence of alcohol; drunk.
+        Intoxicated => "intoxicated",
+
+        /// Feeling as if one cannot be defeated, overcome or denied.
+        Invincible => "invincible",
+
+        /// Fearful of being replaced in position or affection.
+        Jealous => "jealous",
+
+        /// Feeling isolated, empty, or abandoned.
+        Lonely => "lonely",
+
+        /// Unable to find one's way, either physically or emotionally.
+        Lost => "lost",
+
+        /// Feeling as if one will be favored by luck.
+        Lucky => "lucky",
+
+        /// Causing or intending to cause intentional harm; bearing ill will towards another; cruel; malicious.
+        Mean => "mean",
+
+        /// Given to sudden or frequent changes of mind or feeling; temperamental.
+        Moody => "moody",
+
+        /// Easily agitated or alarmed; apprehensive or anxious.
+        Nervous => "nervous",
+
+        /// Not having a strong mood or emotional state.
+        Neutral => "neutral",
+
+        /// Feeling emotionally hurt, displeased, or insulted.
+        Offended => "offended",
+
+        /// Feeling resentful anger caused by an extremely violent or vicious attack, or by an offensive, immoral, or indecent act.
+        Outraged => "outraged",
+
+        /// Interested in play; fun, recreational, unserious, lighthearted; joking, silly.
+        Playful => "playful",
+
+        /// Feeling a sense of one's own worth or accomplishment.
+        Proud => "proud",
+
+        /// Having an easy-going mood; not stressed; calm.
+        Relaxed => "relaxed",
+
+        /// Feeling uplifted because of the removal of stress or discomfort.
+        Relieved => "relieved",
+
+        /// Feeling regret or sadness for doing something wrong.
+        Remorseful => "remorseful",
+
+        /// Without rest; unable to be still or quiet; uneasy; continually moving.
+        Restless => "restless",
+
+        /// Feeling sorrow; sorrowful, mournful.
+        Sad => "sad",
+
+        /// Mocking and ironical.
+        Sarcastic => "sarcastic",
+
+        /// Pleased at the fulfillment of a need or desire.
+        Satisfied => "satisfied",
+
+        /// Without humor or expression of happiness; grave in manner or disposition; earnest; thoughtful; solemn.
+        Serious => "serious",
+
+        /// Surprised, startled, confused, or taken aback.
+        Shocked => "shocked",
+
+        /// Feeling easily frightened or scared; timid; reserved or coy.
+        Shy => "shy",
+
+        /// Feeling in poor health; ill.
+        Sick => "sick",
+
+        /// Feeling the need for sleep.
+        Sleepy => "sleepy",
+
+        /// Acting without planning; natural; impulsive.
+        Spontaneous => "spontaneous",
+
+        /// Suffering emotional pressure.
+        Stressed => "stressed",
+
+        /// Capable of producing great physical force; or, emotionally forceful, able, determined, unyielding.
+        Strong => "strong",
+
+        /// Experiencing a feeling caused by something unexpected.
+        Surprised => "surprised",
+
+        /// Showing appreciation or gratitude.
+        Thankful => "thankful",
+
+        /// Feeling the need to drink.
+        Thirsty => "thirsty",
+
+        /// In need of rest or sleep.
+        Tired => "tired",
+
+        /// [Feeling any emotion not defined here.]
+        Undefined => "undefined",
+
+        /// Lacking in force or ability, either physical or emotional.
+        Weak => "weak",
+
+        /// Thinking about unpleasant things that have happened or that might happen; feeling afraid and unhappy.
+        Worried => "worried",
+    }
+);
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    #[test]
+    fn test_simple() {
+        let elem: Element = "<happy xmlns='http://jabber.org/protocol/mood'/>".parse().unwrap();
+        let mood = MoodEnum::try_from(elem).unwrap();
+        assert_eq!(mood, MoodEnum::Happy);
+    }
+}

src/ns.rs 🔗

@@ -50,6 +50,9 @@ pub const CHATSTATES: &str = "http://jabber.org/protocol/chatstates";
 /// XEP-0092: Software Version
 pub const VERSION: &str = "jabber:iq:version";
 
+/// XEP-0107: User Mood
+pub const MOOD: &str = "http://jabber.org/protocol/mood";
+
 /// XEP-0114: Jabber Component Protocol
 pub const COMPONENT_ACCEPT: &str = "jabber:component:accept";