Move Dto to a separate repository.

This commit is contained in:
2019-11-02 02:23:10 +00:00
parent 6490be73a4
commit 67f8868eac
9 changed files with 7 additions and 492 deletions

3
.gitmodules vendored
View File

@@ -13,3 +13,6 @@
[submodule "DiscImageChef.Decoders"]
path = DiscImageChef.Decoders
url = git@github.com:discimagechef/DiscImageChef.Decoders.git
[submodule "DiscImageChef.Dto"]
path = DiscImageChef.Dto
url = git@github.com:discimagechef/DiscImageChef.Dto.git

View File

@@ -376,6 +376,8 @@
</e>
</e>
<e p="DiscImageChef.Decoders" t="IncludeRecursive">
<e p=".git" t="Include" />
<e p=".gitignore" t="Include" />
<e p="ATA" t="Include">
<e p="Identify.cs" t="Include" />
<e p="Registers.cs" t="Include" />
@@ -523,19 +525,7 @@
<e p="SS.cs" t="Include" />
</e>
<e p="bin" t="ExcludeRecursive" />
<e p="obj" t="ExcludeRecursive">
<e p="Debug" t="Include">
<e p="net461" t="Include">
<e p="DiscImageChef.Decoders.AssemblyInfo.cs" t="Include" />
</e>
<e p="netcoreapp2.0" t="Include">
<e p="DiscImageChef.Decoders.AssemblyInfo.cs" t="Include" />
</e>
<e p="netstandard2.0" t="Include">
<e p="DiscImageChef.Decoders.AssemblyInfo.cs" t="Include" />
</e>
</e>
</e>
<e p="obj" t="ExcludeRecursive" />
</e>
<e p="DiscImageChef.Devices" t="IncludeRecursive">
<e p="Command.cs" t="Include" />

1
DiscImageChef.Dto Submodule

Submodule DiscImageChef.Dto added at 292c6bbea6

View File

@@ -1,53 +0,0 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : CdOffset.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : Database.
//
// --[ Description ] ----------------------------------------------------------
//
// Model for storing Compact Disc read offsets in database.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
using DiscImageChef.CommonTypes.Metadata;
namespace DiscImageChef.Dto
{
public class CdOffsetDto : CdOffset
{
public CdOffsetDto() { }
public CdOffsetDto(CdOffset offset, int id)
{
Manufacturer = offset.Manufacturer;
Model = offset.Model;
Offset = offset.Offset;
Submissions = offset.Submissions;
Agreement = offset.Agreement;
Id = id;
}
public int Id { get; set; }
}
}

View File

@@ -1,234 +0,0 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : Device.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Model for storing processed device reports in database.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
using System.Collections.Generic;
using DiscImageChef.CommonTypes.Metadata;
// ReSharper disable VirtualMemberCallInConstructor
namespace DiscImageChef.Dto
{
public class DeviceDto : DeviceReportV2
{
public DeviceDto() { }
public DeviceDto(DeviceReportV2 report)
{
ATA = report.ATA;
ATAPI = report.ATAPI;
CompactFlash = report.CompactFlash;
FireWire = report.FireWire;
MultiMediaCard = report.MultiMediaCard;
PCMCIA = report.PCMCIA;
SCSI = report.SCSI;
SecureDigital = report.SecureDigital;
USB = report.USB;
Manufacturer = report.Manufacturer;
Model = report.Model;
Revision = report.Revision;
Type = report.Type;
}
public DeviceDto(DeviceReportV2 report, int id, int optimalMultipleSectorsRead)
{
ATA = report.ATA;
ATAPI = report.ATAPI;
CompactFlash = report.CompactFlash;
FireWire = report.FireWire;
MultiMediaCard = report.MultiMediaCard;
PCMCIA = report.PCMCIA;
SCSI = report.SCSI;
SecureDigital = report.SecureDigital;
USB = report.USB;
Manufacturer = report.Manufacturer;
Model = report.Model;
Revision = report.Revision;
Type = report.Type;
if(ATA != null)
{
ATA.Identify = null;
ATA.ReadCapabilities = ClearBinaries(ATA.ReadCapabilities);
if(ATA.RemovableMedias != null)
{
TestedMedia[] medias = ATA.RemovableMedias.ToArray();
ATA.RemovableMedias = new List<TestedMedia>();
foreach(TestedMedia media in medias) ATA.RemovableMedias.Add(ClearBinaries(media));
}
}
if(ATAPI != null)
{
ATAPI.Identify = null;
ATAPI.ReadCapabilities = ClearBinaries(ATAPI.ReadCapabilities);
if(ATAPI.RemovableMedias != null)
{
TestedMedia[] medias = ATAPI.RemovableMedias.ToArray();
ATAPI.RemovableMedias = new List<TestedMedia>();
foreach(TestedMedia media in medias) ATAPI.RemovableMedias.Add(ClearBinaries(media));
}
}
if(PCMCIA != null)
{
PCMCIA.AdditionalInformation = null;
PCMCIA.CIS = null;
}
MultiMediaCard = null;
SecureDigital = null;
if(SCSI != null)
{
SCSI.EVPDPages = null;
SCSI.InquiryData = null;
SCSI.ModeSense6Data = null;
SCSI.ModeSense10Data = null;
SCSI.ModeSense6CurrentData = null;
SCSI.ModeSense10CurrentData = null;
SCSI.ModeSense6ChangeableData = null;
SCSI.ModeSense10ChangeableData = null;
SCSI.ReadCapabilities = ClearBinaries(SCSI.ReadCapabilities);
if(SCSI.ModeSense != null)
{
SCSI.ModeSense.BlockDescriptors = null;
SCSI.ModeSense.ModePages = null;
}
if(SCSI.RemovableMedias != null)
{
TestedMedia[] medias = SCSI.RemovableMedias.ToArray();
SCSI.RemovableMedias = new List<TestedMedia>();
foreach(TestedMedia media in medias) SCSI.RemovableMedias.Add(ClearBinaries(media));
}
if(SCSI.MultiMediaDevice != null)
{
SCSI.MultiMediaDevice.ModeSense2AData = null;
if(SCSI.MultiMediaDevice.Features != null) SCSI.MultiMediaDevice.Features.BinaryData = null;
if(SCSI.MultiMediaDevice.TestedMedia != null)
{
TestedMedia[] medias = SCSI.MultiMediaDevice.TestedMedia.ToArray();
SCSI.MultiMediaDevice.TestedMedia = new List<TestedMedia>();
foreach(TestedMedia media in medias)
SCSI.MultiMediaDevice.TestedMedia.Add(ClearBinaries(media));
}
}
SCSI.SequentialDevice = null;
}
if(USB != null) USB.Descriptors = null;
Id = id;
OptimalMultipleSectorsRead = optimalMultipleSectorsRead;
}
public int OptimalMultipleSectorsRead { get; set; }
public new int Id { get; set; }
static TestedMedia ClearBinaries(TestedMedia media)
{
if(media is null) return null;
media.AdipData = null;
media.AtipData = null;
media.BluBcaData = null;
media.BluDdsData = null;
media.BluDiData = null;
media.BluPacData = null;
media.BluSaiData = null;
media.C2PointersData = null;
media.CmiData = null;
media.CorrectedSubchannelData = null;
media.CorrectedSubchannelWithC2Data = null;
media.DcbData = null;
media.DmiData = null;
media.DvdAacsData = null;
media.DvdBcaData = null;
media.DvdDdsData = null;
media.DvdLayerData = null;
media.DvdSaiData = null;
media.EmbossedPfiData = null;
media.FullTocData = null;
media.HdCmiData = null;
media.HLDTSTReadRawDVDData = null;
media.IdentifyData = null;
media.LeadInData = null;
media.LeadOutData = null;
media.ModeSense6Data = null;
media.ModeSense10Data = null;
media.NecReadCddaData = null;
media.PfiData = null;
media.PioneerReadCddaData = null;
media.PioneerReadCddaMsfData = null;
media.PlextorReadCddaData = null;
media.PlextorReadRawDVDData = null;
media.PmaData = null;
media.PQSubchannelData = null;
media.PQSubchannelWithC2Data = null;
media.PriData = null;
media.Read6Data = null;
media.Read10Data = null;
media.Read12Data = null;
media.Read16Data = null;
media.ReadCdData = null;
media.ReadCdFullData = null;
media.ReadCdMsfData = null;
media.ReadCdMsfFullData = null;
media.ReadDmaData = null;
media.ReadDmaLba48Data = null;
media.ReadDmaLbaData = null;
media.ReadDmaRetryData = null;
media.ReadLba48Data = null;
media.ReadLbaData = null;
media.ReadLong10Data = null;
media.ReadLong16Data = null;
media.ReadLongData = null;
media.ReadLongLbaData = null;
media.ReadLongRetryData = null;
media.ReadLongRetryLbaData = null;
media.ReadRetryLbaData = null;
media.ReadSectorsData = null;
media.ReadSectorsRetryData = null;
media.RWSubchannelData = null;
media.RWSubchannelWithC2Data = null;
media.TocData = null;
media.Track1PregapData = null;
return media;
}
}
}

View File

@@ -1,98 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{F4399FF5-9BD0-475A-9EA7-3DAE45291FE2}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>DiscImageChef.Dto</RootNamespace>
<AssemblyName>DiscImageChef.Dto</AssemblyName>
<ReleaseVersion>$(Version)</ReleaseVersion>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<Version>4.5.99.1693</Version>
<Company>Claunia.com</Company>
<Copyright>Copyright © 2011-2019 Natalia Portillo</Copyright>
<Product>The Disc Image Chef</Product>
<Title>DiscImageChef.Dto</Title>
<ApplicationVersion>$(Version)</ApplicationVersion>
<TargetFrameworks>net461;netstandard2.0;netcoreapp2.0</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<NrtRevisionFormat>$(Version)-{chash:8} built by {mname} in $(Configuration){!:, modified}</NrtRevisionFormat>
<NrtResolveSimpleAttributes>true</NrtResolveSimpleAttributes>
<NrtShowRevision>true</NrtShowRevision>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>full</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="..\LICENSE.LGPL">
<Link>LICENSE.LGPL</Link>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Unclassified.NetRevisionTask" Version="0.3.0" />
</ItemGroup>
<ItemGroup>
<Compile Include="CdOffsetDto.cs" />
<Compile Include="DeviceDto.cs" />
<Compile Include="SyncDto.cs" />
<Compile Include="UsbProductDto.cs" />
<Compile Include="UsbVendorDto.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DiscImageChef.CommonTypes\DiscImageChef.CommonTypes.csproj" />
</ItemGroup>
<ProjectExtensions>
<MonoDevelop>
<Properties>
<Policies>
<StandardHeader IncludeInNewFiles="True" Text="/***************************************************************************&#xA;The Disc Image Chef&#xA;----------------------------------------------------------------------------&#xA; &#xA;Filename : ${FileName}&#xA;Author(s) : ${AuthorName} &lt;${AuthorEmail}&gt;&#xA;&#xA;Component : Component&#xA; &#xA;--[ Description ] ----------------------------------------------------------&#xA; &#xA; Description&#xA; &#xA;--[ License ] --------------------------------------------------------------&#xA; &#xA; This library is free software; you can redistribute it and/or modify&#xA; it under the terms of the GNU Lesser General Public License as&#xA; published by the Free Software Foundation; either version 2.1 of the&#xA; License, or (at your option) any later version.&#xA;&#xA; This library is distributed in the hope that it will be useful, but&#xA; WITHOUT ANY WARRANTY; without even the implied warranty of&#xA; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU&#xA; Lesser General Public License for more details.&#xA;&#xA; You should have received a copy of the GNU Lesser General Public&#xA; License along with this library; if not, see &lt;http://www.gnu.org/licenses/&gt;.&#xA;&#xA;----------------------------------------------------------------------------&#xA;Copyright © 2011-${Year} ${CopyrightHolder}&#xA;****************************************************************************/" />
<TextStylePolicy FileWidth="120" TabWidth="4" IndentWidth="4" RemoveTrailingWhitespace="True" NoTabsAfterNonTabs="False" EolMarker="Native" TabsToSpaces="True" scope="text/x-csharp" />
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="True" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="True" NewLinesForBracesInAccessors="True" NewLinesForBracesInAnonymousMethods="True" NewLinesForBracesInControlBlocks="True" NewLinesForBracesInAnonymousTypes="True" NewLinesForBracesInObjectCollectionArrayInitializers="True" NewLinesForBracesInLambdaExpressionBody="True" NewLineForElse="True" NewLineForCatch="True" NewLineForFinally="True" NewLineForMembersInObjectInit="True" NewLineForMembersInAnonymousTypes="True" NewLineForClausesInQuery="True" SpacingAfterMethodDeclarationName="False" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="False" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="False" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" SpaceAfterControlFlowStatementKeyword="False" scope="text/x-csharp" />
</Policies>
</Properties>
</MonoDevelop>
</ProjectExtensions>
<PropertyGroup Condition="$(TargetFramework.StartsWith('net4')) and '$(OS)' == 'Unix'">
<!-- When compiling .NET SDK 2.0 projects targeting .NET 4.x on Mono using 'dotnet build' you -->
<!-- have to teach MSBuild where the Mono copy of the reference asssemblies is -->
<!-- Look in the standard install locations -->
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/Library/Frameworks/Mono.framework/Versions/Current/lib/mono')">/Library/Frameworks/Mono.framework/Versions/Current/lib/mono</BaseFrameworkPathOverrideForMono>
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/usr/lib/mono')">/usr/lib/mono</BaseFrameworkPathOverrideForMono>
<BaseFrameworkPathOverrideForMono Condition="'$(BaseFrameworkPathOverrideForMono)' == '' AND EXISTS('/usr/local/lib/mono')">/usr/local/lib/mono</BaseFrameworkPathOverrideForMono>
<!-- If we found Mono reference assemblies, then use them -->
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net40'">$(BaseFrameworkPathOverrideForMono)/4.0-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net45'">$(BaseFrameworkPathOverrideForMono)/4.5-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net451'">$(BaseFrameworkPathOverrideForMono)/4.5.1-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net452'">$(BaseFrameworkPathOverrideForMono)/4.5.2-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net46'">$(BaseFrameworkPathOverrideForMono)/4.6-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net461'">$(BaseFrameworkPathOverrideForMono)/4.6.1-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net462'">$(BaseFrameworkPathOverrideForMono)/4.6.2-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net47'">$(BaseFrameworkPathOverrideForMono)/4.7-api</FrameworkPathOverride>
<FrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != '' AND '$(TargetFramework)' == 'net471'">$(BaseFrameworkPathOverrideForMono)/4.7.1-api</FrameworkPathOverride>
<EnableFrameworkPathOverride Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">true</EnableFrameworkPathOverride>
<!-- Add the Facades directory. Not sure how else to do this. Necessary at least for .NET 4.5 -->
<AssemblySearchPaths Condition="'$(BaseFrameworkPathOverrideForMono)' != ''">$(FrameworkPathOverride)/Facades;$(AssemblySearchPaths)</AssemblySearchPaths>
</PropertyGroup>
</Project>

View File

@@ -1,12 +0,0 @@
using System.Collections.Generic;
namespace DiscImageChef.Dto
{
public class SyncDto
{
public List<UsbVendorDto> UsbVendors { get; set; }
public List<UsbProductDto> UsbProducts { get; set; }
public List<CdOffsetDto> Offsets { get; set; }
public List<DeviceDto> Devices { get; set; }
}
}

View File

@@ -1,42 +0,0 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : UsbProduct.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Model for storing USB product identifiers in database.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
namespace DiscImageChef.Dto
{
public class UsbProductDto
{
public int Id { get; set; }
public ushort ProductId { get; set; }
public string Product { get; set; }
public ushort VendorId { get; set; }
}
}

View File

@@ -1,40 +0,0 @@
// /***************************************************************************
// The Disc Image Chef
// ----------------------------------------------------------------------------
//
// Filename : UsbVendor.cs
// Author(s) : Natalia Portillo <claunia@claunia.com>
//
// Component : DiscImageChef Server.
//
// --[ Description ] ----------------------------------------------------------
//
// Model for storing USB vendor identifiers in database.
//
// --[ License ] --------------------------------------------------------------
//
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2011-2019 Natalia Portillo
// ****************************************************************************/
namespace DiscImageChef.Dto
{
public class UsbVendorDto
{
public ushort VendorId { get; set; }
public string Vendor { get; set; }
}
}