private IEnumerable <DeviceResource> GetResources(Device device, string payload)
        {
            var coreResources = CoreLinkFormat.Parse(payload);

            foreach (var coreResource in coreResources)
            {
                var resource = new DeviceResource
                {
                    Device = device,
                    Url    = coreResource.UriReference,
                };

                if (!string.IsNullOrEmpty(coreResource.Title))
                {
                    resource.Name = coreResource.Title;
                }

                if (coreResource.SuggestedContentTypes.Count > 0)
                {
                    resource.ContentFormat = coreResource.SuggestedContentTypes[0];
                }

                yield return(resource);
            }
        }
        public void ParseExtensiveLinkFormat()
        {
            // Arrange
            var expected = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor", "read" },
                    ResourceTypes        = { "temperature-c", "temperature-f" },
                    Rel      = { "one", "two" },
                    HrefLang = "en-nz",
                    Media    = "none",
                    Title    = "Outside Temperature",
                    TitleExt = "Primo Sensor",
                    SuggestedContentTypes =
                    {
                        Options.ContentFormatType.TextPlain,
                        Options.ContentFormatType.ApplicationJson
                    }
                },
                new CoapResourceMetadata("http://stupid.schema.io/temperature.json")
                {
                    Anchor = "/sensor/temp"
                },
                new CoapResourceMetadata("/firmware/v2.1")
                {
                    ResourceTypes         = { "firmware" },
                    SuggestedContentTypes = { Options.ContentFormatType.ApplicationOctetStream },
                    MaxSize = 262144
                }
            };

            var message = "</sensor/temp>;if=\"sensor read\";ct=\"0 50\";rt=\"temperature-c temperature-f\";rel=\"one two\";hreflang=en-nz;media=none;title=\"Outside Temperature\";title*=utf-8'en-nz'\"Primo Sensor\""
                          + ",<http://stupid.schema.io/temperature.json>;anchor=\"/sensor/temp\""
                          + ",</firmware/v2.1>;rt=\"firmware\";ct=42;sz=262144";

            // Act
            var actual = CoreLinkFormat.Parse(message);

            // Assert
            Assert.IsTrue(expected.SequenceEqual(actual));
        }
        public void ParseSimpleLinkFormat()
        {
            // Arrange
            var expected = new List <CoapResourceMetadata>
            {
                new CoapResourceMetadata("/sensor/temp")
                {
                    InterfaceDescription = { "sensor" }
                },
                new CoapResourceMetadata("/sensor/light")
                {
                    InterfaceDescription = { "sensor" }
                }
            };

            var message = "</sensor/temp>;if=\"sensor\",</sensor/light>;if=\"sensor\"";

            // Act
            var actual = CoreLinkFormat.Parse(message);

            // Assert
            Assert.IsTrue(expected.SequenceEqual(actual));
        }